我有一个经典的3层ASP.Net 3.5 Web应用程序,其中包含显示业务对象并允许对其进行编辑的表单.表单上的控件对应于底层业务对象的属性.用户将具有读/写,只读或不能访问各种控件,具体取决于他/她的角色.非常传统的东西.
我的问题是:用于编码的面向对象最佳实践是什么?有没有比在测试中包装每个控件更优雅的用户角色并设置其Visible和Enabled属性?
谢谢
小智 2
为了正常工作,我发现访问级别应该按以下递增顺序:无、查看、必需、编辑。
请注意,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);
Run Code Online (Sandbox Code Playgroud)
从底层(数据库约束),创建要访问的字段的映射。然后,该映射在下一层(业务规则+用户权限)得到更新(进一步限制)。最后,如果需要,顶层(表示规则)可以再次进一步限制地图。
重要提示:必须对地图进行包装,以便仅允许在任何后续更新时减少访问。尝试增加访问权限的更新应该被忽略,而不会触发任何错误。这是因为它应该像一个投票系统一样,决定访问权限应该是什么样子。本质上,如上所述的访问级别的后续分层可以以任何顺序发生,因为一旦所有层都投票,它将导致每个字段的访问级别低水位线。
后果:
1) 表示层可以隐藏数据库指定的只读(VIEW)字段的字段(设置访问权限为NONE)。
2) 当业务规则规定用户至少没有 VIEW 访问权限时,表示层无法显示字段。
3) 如果数据库表示字段仅是“必需”(不可为空),则表示层无法将字段的访问权限移至“可编辑”(可为空)。
注意:应该使表示层(自定义显示标签)通过读取访问映射来呈现字段,而不需要任何“if”语句。
用于设置显示的相同访问映射也可以在提交验证期间使用。可以编写通用验证器来读取任何表单及其访问映射,以确保遵循所有规则。
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |