ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Frameworkモバイル開発者ガイド
11g リリース2 (11.1.2.3.0)
B70750-01
  目次へ
目次

前
 
次
 

14 制約の設定

この章では、ユーザーのアクセス権限またはデバイス要件に基づいてアプリケーション機能を制限できる制約の設定方法について説明します。

この章では、次の項目について説明します。

14.1 制約の概要

制約には、アプリケーション機能またはコンテンツを使用するタイミングが記述されています。制約には、デバイス上で使用可能なハードウェアのほか、ユーザーとユーザー・ロール、モバイル・アプリケーションの実行対象となるデバイスの特性が記述されています。アプリケーションの承認機能を管理者ロールを持つユーザーのみに制限するなど、アプリケーション機能全般に渡って制約を定義できます。アプリケーション機能のコンテンツに関しては、あるタスク・フローを管理者ロールを持つユーザーのみに使用可能にし、別のタスク・フローを営業担当ロールを持つユーザーのみに使用可能にするなどの制約を設定できます。

14.2 アプリケーション機能の制約の定義

制約は実行時に評価され、アプリケーション機能をデプロイできるようにするにはtrueに評価される必要があります。<adfmf:constraint>要素(<adfmf:constraints>の子要素)のpropertyoperatorおよびvalueの各属性では、ユーザー、デバイスおよびハードウェアの各オブジェクトを参照できます。例14-1に示すこれらの属性の定義の例は、アプリケーション機能へのアクセスをField Repに制限し、さらにiOS用デバイスでのみアプリケーションを実行するように制限する属性の定義を示しています。

例14-1 <adfmf:constraint>要素

<adfmf:constraints>
      <adfmf:constraint property="user.roles"  
                        operator="contains"
                        value="Field Rep"/>
      <adfmf:constraint property="device.model" 
                        operator="contains"
                        value="ios"/>
</adfmf:constraints>

14.2.1 アプリケーション機能に制約を定義する方法

図14-0に示すように、「機能」ページの「制約」タブを使用して、選択したアプリケーション機能の制約を宣言的に構成します。

図14-1 制約の定義

機能の制約を定義します。

アプリケーション機能の制約を定義するには:

  1. 「制約」タブをクリックします。

  2. 「追加」をクリックします。

  3. プロパティと適切な演算子を選択し、値を入力します。プロパティの使用の詳細は、第14.2.3項「property属性について」を参照してください。

14.2.2 制約を定義する場合の処理

例14-1と同様に、「制約」タブに値を入力すると、定義された<adfmf:constraint>要素を使用して、識別子ファイルの<adfmf:constraints>要素が更新されます。

14.2.3 property属性について

ADFモバイルでは、ユーザー、デバイスおよびハードウェアの各プロパティを反映するproperty属性のセットが提供されています。これらのプロパティを次の演算子と組み合せて使用することでアプリケーション機能の使用方法が決定されます。

  • contains

  • equal

  • less

  • more

  • not

14.2.3.1 ユーザー制約

user.privilegesおよびuser.rolesの各制約とcontainsまたはnotの演算子を使用して、ログイン・ユーザーのアプリケーション機能へのアクセスを制限します。この制限は、ADFモバイル・ランタイムによる評価方法により、ユーザー・ロールとユーザー権限に基づきます。

アプリケーション・ログイン・サーバー接続のアクセス制御を使用して、user.rolesおよびuser.privilegesに基づく制約を評価します。通常は、user.rolesおよびuser.privilegesに基づく制約を使用してアプリケーション機能へのアクセスを制御します。たとえば、アプリケーション機能へのアクセスをmanager_roleロールを持つユーザーのみに許可するには、user.roles contains manager_roleの制約をアプリケーション機能の定義に追加する必要があります。

アプリケーションの起動時に、「ADFモバイル・ログイン・サーバー接続の作成」ダイアログの「アクセス制御URL」オプションにエンド・ポイントが定義されているアクセス制御サービス(ACS) Webサービスが起動され、ユーザーに割り当てられたロールと権限がフェッチされてADFモバイルによる評価が可能になります。各アプリケーション機能の制約セットが評価され、関連付けられたすべての制約を満たしたアプリケーション機能のみがユーザーに対して使用可能となります。詳細は、第17.4.2項「ログイン・ページの指定方法」および17.4.6項「アクセス制御サービスについて」を参照してください。

Oracle Identity Connect (OIC)にログインすると、ロールおよび権限コレクションがuserオブジェクトに移入されます。詳細は、第17.3項「認証の概要」を参照してください。

user.rolesおよびuser.privilegesでは、containsおよびnotの演算子を次のように使用します。

  • contains: ロールまたは権限のコレクションに名前の付いたロールまたは権限が含まれる場合、ランタイムではその制約をtrueに評価します。例14-2には、contains演算子を使用したuser.rolesプロパティの使用の例が示されています。ユーザーのロールに従業員のロールが含まれている場合は、モバイル・アプリケーションにアプリケーション機能が表示されます。

    例14-2 ユーザー・ロール・コレクションに対するcontains演算子の使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="user.roles"  
                      operator="contains"
                      value="employee" />
       </constraints>
       ...
    </feature>
    
  • not: ロールまたは権限のコレクションに名前の付いたロールまたは権限が含まれない場合、ランタイムではその制約をtrueに評価します。例14-3では、ユーザーの権限に管理者権限が含まれる場合はアプリケーション機能が含められません。

    例14-3 not演算子とuser.privilegesプロパティを使用したアプリケーション機能へのアクセスの制限

    <feature ...>
       ...
       <constraints>
          <constraint property="user.privileges"  
                      operator="not"
                      value="manager" />
       </constraints>
       ...
    </feature>
    
14.2.3.1.1 ハードウェア関連の制約

ハードウェア・オブジェクトは、カメラの有無、コンパス向首方向情報提供機能、ファイルの保存機能など、デバイスで使用可能なハードウェアを参照します。次のプロパティではequal演算子が使用されます。

  • hardware.networkStatus: アプリケーションの起動時にネットワークの状態が表示されます。NotReachableCarrierDataConnectionおよびWiFiConnectionの3つの属性値を使用してこのプロパティを変更できます。例14-4 は、この3つ目の属性値を例示しています。その例に示すとおり、この値を設定することで、デバイス・ハードウェアがWi-Fi接続があることを示している場合にのみモバイル・アプリケーションにこのモバイル・アプリケーション機能が表示されることになります。つまり、デバイスにWi-Fi接続がない場合は、ADFモバイル・アプリケーションをロードしても、そのアプリケーション機能は表示されません。

    例14-4 hardware.networkStatusプロパティの定義

    <feature ...>
    ...
       <constraints>
          <constraint property="hardware.networkStatus" 
                      operator="equal" 
                      value="WiFiConnection" />
       </constraints>
    ...
    </feature>
    

    注意:

    この制約は、iOSデバイスの起動時に評価されます。たとえば、起動時にデバイスにWi-Fi接続がなく、その後その接続を取得した場合、ユーザーがWi-Fiのホットスポットに入っても、アプリケーション機能は無効のままとなり、ユーザーがモバイル・アプリケーションを停止し再起動するまで利用できません。


  • hardware.hasAccelerometer: デバイスに加速度計があるかどうかを示します。このプロパティは、trueまたはfalseの値で定義します。例14-5は、trueの値を示しており、ハードウェアに加速度計がある場合にのみこのアプリケーション機能が利用可能なことを示しています。

    例14-5 hardware.hasAccelerometerプロパティの使用方法

    <feature ...>
    ...
       <constraints>
          <constraint property="hardware.hasAccelerometer"  
                      operator="equal"
                      value="true" />
    </constraints>
    ...
    </feature>
    

    注意:

    iOSベースのハードウェアにはすべて加速度計があるため、このプロパティは常にtrueの値にして、iOSデバイスでアプリケーション機能が利用できるようにしておく必要があります。


  • hardware.hasCamera: デバイスにカメラがあるかどうかを示します。この制約は、trueまたはfalseの属性値を使用して定義します。例14-6は、値がtrueに設定されており、デバイスにカメラが含まれている場合にのみアプリケーション機能が利用可能なことを示しています。

    例14-6 hardware.hasCameraプロパティの使用方法

    <feature ...>
    ...
       <constraints>
          <constraint property="hardware.hasCamera"  
                      operator="equal"
                      value="true" />
    </constraints>
    ...
    </feature>
    

    注意:

    すべてのiOSベース・ハードウェアにカメラが搭載されているわけではありません。この値は、iOSデバイスでADFモバイル・アプリケーションを起動した際に動的に評価されます。そのときに、モバイル・アプリケーションでは、trueに評価されないアプリケーション機能が削除されます。


  • hardware.hasCompass: デバイスにコンパスがあるかどうかを示します。この制約は、例14-7に示すように、trueまたはfalseの属性値を使用して定義します。

    例14-7 hardware.hasCompassプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasCompass"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    すべてのiOSデバイスにコンパスがあるわけではありません。この値は、iOSデバイスでADFモバイル・アプリケーションを起動した際に動的に評価されます。そのときに、モバイル・アプリケーションでは、trueに評価されないアプリケーション機能が削除されます。


  • hardware.hasContacts: デバイスにアドレス帳またはコンタクト先があるかどうかを示します。この制約は、例14-8に示すように、trueまたはfalseの属性値を使用して定義します。

    例14-8 hardware.hasContactsプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasContacts"  
                      operator="equal"
                      value"=true" />
          </constraints>
       ...
    </feature>
    

    注意:

    iOSベースのハードウェアのコンタクト先はPhoneGap経由でアクセスされるため、iOSデバイスに対してはvalue属性は常にtrueに設定されます。


  • hardware.hasFileAccess: デバイスでファイル・アクセスが可能かどうかを示します。この制約は、例14-9に示すように、trueまたはfalseの属性値を使用して定義します。ランタイムがこの制約をtrueに評価した場合にのみ、アプリケーション機能を利用できます。

    例14-9 hardware.hasFileAccessプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasFileAccess"
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    iOSベースのハードウェアのファイル・アクセスはPhoneGap経由でアクセスされるため、iOSデバイスに対してはvalue属性は常にtrueになります。


  • hardware.hasGeoLocation: デバイスが地理的位置情報サービスを提供しているかどうかを示します。この制約は、例14-10に示すように、trueまたはfalseの属性値を使用して定義します。デバイスが地理的位置情報をサポートする場合にのみ、アプリケーション機能を利用できます。

    例14-10 hardware.hasGeoLocationプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasGeoLocation"  
                      operator="equal"
                      value="true"/>
       </constraints>
       ...
    </feature>
    

    注意:

    PhoneGapでは、すべてのiOSデバイスに対して地理的位置情報サービスへのアクセスを提供しているわけではありません。デバイスによっては、制約がランタイムにより評価された場合に、アプリケーション機能が利用できない可能性があります。


  • hardware.hasLocalStorage: デバイスがファイルのローカル記憶域を提供するかどうかを示します。この制約は、例14-11に示すように、trueまたはfalsevalue属性を使用して定義します。デバイスがローカルでのファイルの格納をサポートする場合にのみ、アプリケーション機能が表示されます。

    例14-11 hasLocalStorageプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasLocalStorage"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    PhoneGapではすべてのiOSハードウェアでローカル・ファイル記憶域へのアクセスが提供されるため、iOSデバイスに対するvalue属性は常にtrueになります。


  • hardware.hasMediaPlayer: デバイスにメディア・プレーヤがあるかどうかを示します。この制約は、例14-12に示すように、trueまたはfalsevalue属性を使用して定義します。デバイスにメディア・プレーヤがある場合にのみ、アプリケーション機能が表示されます。

    例14-12 hardware.hasMediaPlayerプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasMediaPlayer"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    PhoneGapではiOSベースのハードウェアでメディア・プレーヤへのアクセスを提供しているため、iOSデバイスではvalue属性は常にtrueになります。


  • hardware.hasMediaRecorder: デバイスにメディア・レコーダがあるかどうかを示します。この制約は、例14-13に示すように、trueまたはfalsevalueを使用して定義します。デバイス・ハードウェアがメディア・レコーダをサポートする場合にのみ、アプリケーション機能が含まれます。

    例14-13 hardware.hasMediaRecorderプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasMediaRecorder"  
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    すべてのiOSベースのハードウェアにPhoneGapからアクセス可能なメディア・レコーダがあるため、すべてのiOSデバイスでこの値をtrueに設定します。Apple iTouchなどのいくつかのデバイスにはマイクがありませんが、エンド・ユーザーは外部マイクを取り付けることでレコーディングが可能になります。


  • hardware.hasTouchScreen: ハードウェアにタッチ・スクリーン機能があるかどうかを示します。この制約は、例14-14に示すように、trueまたはfalsevalue属性を使用して定義します。デバイス・ハードウェアがタッチ・スクリーンをサポートする場合にのみ、アプリケーション機能が含められます。

    例14-14 hardware.hasTouchScreenプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.hasTouchScreen" 
                      operator="equal"
                      value="true" />
       </constraints>
       ...
    </feature>
    

    注意:

    すべてのiOSベースのハードウェアにタッチ・スクリーン機能があるため、iOSデバイスのvalue属性をtrueに設定します。


  • hardware.screen.width: デバイスの現在の向きでの画面幅を示します。例14-15の320など、画面幅(ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-15 hardware.screen.widthプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.width" 
                      operator="equal"
                      value="320" />
       </constraints>
       ...
    </feature>
    

    注意:

    この値はモバイル・アプリケーションの起動時に評価され、その際にランタイムが制約を評価し、trueに評価されない制約を持つアプリケーション機能は削除されます。ADFモバイル・アプリケーションの起動後にユーザーがデバイスを回転させた場合、アプリケーション機能の設定はモバイル・アプリケーションの起動後に修正されるため、ADFモバイルのランタイムではこの制約は再評価されません。


  • hardware.screen.height: デバイスの現在の位置における画面高さを示します。例14-16に示すように、320や480などの画面幅(ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-16 hardware.screen.heightプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.height"
                      operator="equal"
                      value="480" />
       </constraints>
       ...
    </feature>
    

    注意:

    モバイル・アプリケーションの起動時に、trueに評価されない制約を持つアプリケーション機能を削除するプロセスの一部として、ADFモバイル・ランタイムではこの制約の画面高さの値を評価します。ADFモバイル・アプリケーションの起動後にユーザーがデバイスの向きを変えた場合は、アプリケーション機能の設定はモバイル・アプリケーションの起動後に修正されるため、ランタイムではこの制約は再評価されません。


  • hardware.screen.availableWidth: デバイスの現在の向きで利用可能な画面幅を示します。例14-17に示すように、320や480などの画面幅(ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-17 hardware.screen.availableWidthプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.availableWidth"  
                      operator="equal"
                      value"320" />
       </constraints>
       ...
    </feature>
    
  • hardware.screen.availableHeight: デバイスの現在の位置で利用可能な画面高さを示します。例14-18に示すように、320や480などの画面幅(ピクセル単位)を示す数値を入力します。この値はデバイスの向きによって異なります。

    例14-18 hardware.screen.availableHeightプロパティの使用方法

    <feature ...>
       ...
       <constraints>
          <constraint property="hardware.screen.availableHeight"  
                      operator="equal"
                      value"480" />
       </constraints>
       ...
    </feature>