【问题标题】:How to protect certain actions from usage according to a custom UserRoles table I created如何根据我创建的自定义 UserRoles 表保护某些操作不被使用
【发布时间】:2012-02-13 17:13:00
【问题描述】:
这是用户和用户角色的基本数据库结构。
我的客户希望能够查看一个角色并勾选一些框,“该角色可以执行 x、y 和 z”。 X、Y 和 Z 是应用程序中的一些操作。
这不是一个新想法,我相信这种情况有一种经过验证的模式。与 Wordpress 所做的类似,它选择角色 Foo 可以执行的功能,并且用户属于该角色。
关于 MVC3 特定解决方案的任何建议?
【问题讨论】:
标签:
asp.net-mvc-3
security
roles
actionmethod
【解决方案1】:
内置属性[Authorize] 允许您限制某些操作,以便只能由某些角色执行。
对于您要尝试的内容,我建议将“功能 X、Y 和 Z”视为角色,并将您当前拥有的角色视为“用户组”或其他内容。因此,您的客户将能够为某些“角色”分配不同的“用户组”访问权限。
这样您就可以利用内置的成员资格/角色/授权内容。您需要做的就是实现自己的 MembershipProvider 和 RoleProvider。
string[] GetRolesForUser(string username) 的角色提供者实现需要进行数据库查找,以查看他们所在的“用户组”,以及他们有权访问的“角色”。
如果您这样做,您可以通过[Authorize] 属性轻松限制对不同功能的访问,并使用标准成员资格来处理登录过程。
如果您的客户坚持称它们为“角色”和“功能”而不是“用户组”和“角色” - 您无需告诉他这不是您实现它的方式 :)
编辑
或者,您可以创建自己的授权属性,只需从 AuthorizeAttribute 派生,如果用户处于允许的角色中,则覆盖 AuthorizeCore( HttpContextBase httpContext) 返回 true 或 false 执行功能“X”