为了正常工作,我发现访问级别应该按递增顺序排列:NONE、VIEW、REQUIRED、EDIT。
请注意,REQUIRED 不是您可能认为的最高级别,因为 EDIT(填充和取消填充权限)比 REQUIRED(仅填充权限)具有更大的权限。
枚举看起来像这样:
/** 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)如果数据库说它只是“必需的”(不可为空),表示层不能将字段的访问权限移动到“可编辑”(可空)。
注意:应该使表示层(自定义显示标签)通过读取访问映射来呈现字段,而不需要任何“if”语句。
用于设置显示的相同访问映射也可以在提交验证期间使用。可以编写通用验证器来读取任何表单及其访问映射,以确保已遵循所有规则。
(另见线程:控制对表单字段的访问的最佳实践)