適切に機能させるには、アクセス レベルを NONE、VIEW、REQUIRED、EDIT の昇順にする必要があることがわかりました。
REQUIRED はトップ レベルではないことに注意してください。なぜなら、EDIT (populate と de-populate の両方の許可) は REQUIRED (populate のみの許可) よりも大きな権限だからです。
列挙型は次のようになります。
/** NO permissions.
* Presentation: "hidden"
* Database: "no access"
*/
NONE(0),
/** VIEW permissions.
* Presentation: "read-only"
* Database: "read access"
*/
VIEW(1),
/** VIEW and POPULATE permissions.
* Presentation: "required/highlighted"
* Database: "non-null"
*/
REQUIRED(2),
/** VIEW, POPULATE, and DEPOPULATE permissions.
* Presentation: "editable"
* Database: "nullable"
*/
EDIT(3);
最下層 (データベースの制約) から、アクセスするフィールドのマップを作成します。このマップは、次のレイヤー (ビジネス ルール + ユーザー権限) で更新されます (さらに制限されます)。最後に、最上層 (プレゼンテーション ルール) は、必要に応じてマップをさらに制限することができます。
重要: マップは、その後の更新でアクセスが減少することのみを許可するようにラップする必要があります。アクセスを増加させようとする更新は、エラーを発生させずに無視する必要があります。これは、アクセスがどのように見えるべきかについて投票システムのように機能する必要があるためです。本質的に、すべてのレイヤーが投票すると、各フィールドのアクセスレベルの最低水準点が得られるため、上記のアクセスレベルの後続のレイヤー化は任意の順序で発生する可能性があります。
影響:
1) プレゼンテーション層は、データベース指定の読み取り専用 (VIEW) フィールドのフィールドを非表示にする (NONE にアクセスを設定する) ことができます。
2) ユーザーが少なくとも VIEW アクセス権を持っていないとビジネス ルールで指定されている場合、プレゼンテーション層はフィールドを表示できません。
3) プレゼンテーション レイヤーは、データベースが「必須」(null 不可) のみであると言う場合、フィールドのアクセス権を「編集可能」(null 可) に移動することはできません。
注: "if" ステートメントを必要とせずにアクセス マップを読み取ってフィールドをレンダリングするように、プレゼンテーション レイヤー (カスタム表示タグ) を作成する必要があります。
表示のセットアップに使用される同じアクセス マップは、送信の検証中にも使用できます。すべてのルールが守られていることを確認するために、任意のフォームとそのアクセス マップを読み取る汎用バリデータを作成できます。
(スレッド:フォーム フィールドへのアクセスを制御するためのベスト プラクティスも参照してください)