【发布时间】:2013-12-27 04:25:57
【问题描述】:
我们正在创建一个 MVC 4 应用程序,该应用程序需要授权用户根据他/她的角色成员身份查看和/或与某些模型字段进行交互。
例如,如果模型有一个字段 SSN,则只有当他/她是管理员角色的成员时,才应允许用户查看此字段。一旦显示,用户应该只能在 profile_admin 角色的成员中修改它。换句话说,如果用户不是 admin 角色的成员,则不应呈现 SSN 字段,如果用户不是 profile_admin 角色的成员,则应禁用 SSN 字段。哪些角色具有权限应由站点管理员通过管理 UI 控制。
一种可能的解决方案是将 SSN 字段包装在部分视图中,然后在我们的自定义视图引擎中处理呈现。但是,这种方法需要我们想要控制的每个字段都在局部视图中,如果用户想要控制另一个字段(比如 HireDate),则需要更改代码
我们希望可以通过在元数据类中使用自定义属性来实现这一点,如下所示:
[CustomFieldAuthorizeAttribute]
public string SSN { get; set; }
我们会将每个字段的授权信息保存在数据库中,如下所示:
FieldName RoleId AllowView AllowEdit
SSN 1 True False
当属性执行时,它将检查当前登录用户的角色成员资格,并确定查看和编辑该字段的权限,然后注入适当的 html 属性,如 class="hidden" 或 disabled="disabled ”。
这样如果用户想为另一个字段添加授权,我们需要做的就是在数据库中为这个字段创建一条记录。自定义属性将从那里获取它。
有没有可能实现这样的功能
谢谢。
【问题讨论】:
标签: asp.net-mvc-4