UI を保護する

アプリを保護するときに、ページや UI 要素(ウィジェットまたはウィジェットの一部)を保護することもできます。UI のセキュリティにより、ユーザーが表示できる対象や、スクリーン リーダーで聞くことができる内容が決まります。

アプリの UI を保護する方法

App Maker を使用すると、次の方法でアプリの UI を保護できます。

  • ページを保護する - ページにセキュリティを適用して、ユーザーが表示できるページを制御します。プロパティ エディタ()の [Security] で、各ページに役割またはスクリプトのアクセス権を適用します。
  • UI 要素を保護する - visible プロパティを使用して、ページ上のどの要素をユーザーに表示するかを制御します。visible プロパティは、ウィジェットと複合ウィジェットの一部に使用できます。プロパティ エディタ()の [Display] で、true(表示)または false(非表示)に解決されるバインディング式を UI 要素に定義します。

ページを保護する

ページのセキュリティを設定して、ユーザーがアクセスできるアプリのページを制御します。

ページを保護する理由

  • 機密性の高い静的情報へのアクセスを制限する - 特定のユーザーだけに表示すべき静的情報が表示されることがあります。たとえば、試験運用のための機密情報がページに含まれていることがあります。
  • 必要に応じてページの使用を制限する - たとえば、グループ内に異なる職種のユーザーがいる場合、ページを使用しないユーザーにページを表示しても意味がありません。管理者以外のユーザーに管理者用のページへのアクセスを許可する理由はありません。
  • ページの保護でパフォーマンスが向上する - ユーザーがアクセスできるページを制御することでパフォーマンスが向上します。ページやデータにアクセスするべきではないユーザーのために、App Maker が不要なページや関連データを取得する必要がなくなるため、データのやり取りが少なくなります。

ページのアクセス権を設定する

ページのセキュリティではアクセス権を使用します。ページに使用できるアクセス権は、管理者のみ、すべてのユーザー、役割、スクリプトです。

  1. App Maker を開きます。
  2. 左側のサイドバーで、権限を設定するページをクリックします。
  3. プロパティ エディタ()の [Security] で、ページに適用するアクセス権をリストから選択します。

App Maker がページへのアクセスを制御する方法

  • 取得 - App Maker は、ページの権限を使用して、ユーザーに特定のページを表示するかどうかを決定します。ユーザーにアクセス権がない場合、App Maker はそのページを取得しません。App Maker アプリはウェブアプリのため、App Maker がページの存在を確認することはありません。見つからない場合は、Page Not Found エラー(HTTP 404)を返します。App Maker では、メニューにページの一覧が表示されません。アクセス権のないユーザーのために、ページへのリンクを表示しないナビゲーションを設計することもできます。
  • 表示 - ページが取得されていない場合、ユーザーはそのページを表示できません。また、ページリーダーで読むこともできません。
  • DOM - App Maker が取得しないページは DOM にありません。

ページの参照

ページの参照には注意が必要です。

  • アプリ内のページの参照 - メニューでアプリ内のページを参照する場合(たとえば、バインディング式 @pages や、スクリプトの app.pages)、App Maker は、ユーザーにアクセス権のあるページのみを表示します。
  • ページへのリンク - ページにリンクしている UI 要素の表示を制御できます(たとえば、リンクの表示など)。
  • ページの URL - ユーザーが、他のユーザーからアクセスされないページの URL を取得することがあります。また、ユーザーが URL をブックマークに登録してから、アプリのその部分へのアクセス権を失う場合があります。
  • DOM でのページ参照 - アプリ内のページから他のページを参照できるため(リンクなど)、知識のあるユーザーが、アクセスできないページへの参照を DOM で見つける可能性があります。

UI 要素の表示を制御する

visible プロパティを使用すると、ページ上の UI 要素(ウィジェットまたはウィジェットの一部)を特定のユーザーに表示するかどうかを制御できます。表示を制御する理由は次のとおりです。

  • 関連性 - 特定の状況や特定のユーザーに関連のないコンテンツやナビゲーション コントロールがある場合、このような要素をページで使用しないでください。たとえば、レコードを編集するリンクは、レコードが存在する場合にのみ意味があります。レコードが存在しない場合は、リンクを非表示にします。データによって表示を制御することもできます。
  • セキュリティ - ユーザーが特定の UI 要素を使用できないようにする必要がある場合は、そのユーザーに要素を表示しないようにします。

ブール値に評価されるバインディング式を記述する

セキュリティを維持するため、UI 要素の visible プロパティには、セキュリティ対策を呼び出し、結果がブール true または false で評価されるバインディング式を記述してください。記述方法は次のとおりです。

  • バインディング式で、アクセスを許可するメンバーの役割を参照します。この例では、Managers グループのメンバーにアクセスを許可しています。

    (@user.roles).indexOf('Managers') > -1

  • クライアント スクリプトで、サーバー スクリプトのメソッドを呼び出すメソッドを実行します。サーバー スクリプトのメソッドを使用して、任意の基準に基づいて可視性を判断します。たとえば、役割のメンバーシップやデータに基づいて判断します。サーバーのメソッドがクライアントのメソッドに true または false を返し、クライアントのメソッドはその値を返すようにします。

自動型変換を使用する

App Maker の visible プロパティでは、ブール値の結果が必要です。バインディング式が true または false を返すと、App Maker は指定された値を使用します。

visible プロパティのバインディング式は、数値型または文字列型のフィールドにもバインドできます。また、数値または文字列を返す関数を呼び出すこともできます。このような場合、App Maker は型変換を行い、数値または文字列をブール値に変換します。日付型のフィールドはバインドできません。関数が日付を返す場合、日付は文字列として扱われます。

実行される変換は、バインディング トランスフォーマーの numToBool()strToBool() を使用した場合と同じです。必要ではありませんが、バインディング トランスフォーマーを使用することもできます。

数値の自動型変換と numToBool() によって実行される型変換は、JavaScript の型変換と一致します。特殊なケースの型変換(未定義、null、NaN)も JavaScript の型変換と一致します(すべて false)

文字列の型変換と strToBool() による型変換は JavaScript の型変換と一致していません。

次の情報を参考にしてください。

フィールド タイプ True(表示) False(非表示)
ブール値

(JavaScript と一致)
値: ボックスがオン
true
値: ボックスがオフ
false
数値

(JavaScript と一致)
1, 1.0
False のリストにないすべての値(2、208.1、-7、Infinity、-Infinity など)
0, -0, 0.0, -0.0
文字列

(JavaScript と一致しません)
"true", "True", "TRUE"... (大文字と小文字は区別されません) "false""False""FALSE"...(大文字と小文字は区別されません)
True のリストにないすべての値(employee、admin など)

ウィジェットの階層で表示を制御する

ウィジェットの多くは階層構造になっています。フォームには、タイトル、データの入力または選択用のテキスト ボックスなどがあります。表示の制御は、ウィジェット全体に行うことも、ウィジェットの一部に行うこともできます。

階層で visible プロパティの値を false にすると、その UI 要素だけでなく、それより下の階層にある UI 要素がすべて非表示になります。