控制表单字段访问的最佳实践

Sis*_*utl 5 asp.net

我有一个经典的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”语句。

用于设置显示的相同访问映射也可以在提交验证期间使用。可以编写通用验证器来读取任何表单及其访问映射,以确保遵循所有规则。