对用户的基于角色的访问控制
Posted
技术标签:
【中文标题】对用户的基于角色的访问控制【英文标题】:Role-Based Access Control to a User 【发布时间】:2015-07-22 20:15:17 【问题描述】:我有一个使用实体框架的应用程序 MVC 4.0。
我有一个 USER 表、Role 表、Type 表。
角色可以是两者之一:Administrator
、User
类型可以是 8 个:无,Admin, Asst.Admin, ......
所以我想允许根据以下类型访问不同的页面:
1) 类型定义:
None Con Acc Rec St Fr Admin AsAd ( <-- Types)
----------------------------------------------------------
1.a) 更新客户端:
None None None None Edit View Full Full ( <-- Roles)
1.b) 新客户:
None None None View View Edit Full Full ( <-- Roles)
那么这将如何实现呢?
【问题讨论】:
到目前为止你有什么尝试?你尝试过什么吗?你用谷歌搜索过吗? 【参考方案1】:您可以通过 AuthorizeAttribute 实现此目的:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class ActionPermissionAttribute : AuthorizeAttribute
public override void OnAuthorization(AuthorizationContext filterContext)
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
var actionName = filterContext.ActionDescriptor.ActionName;
将此属性添加到您需要授权的所有操作中 - 在控制器上添加会使这更容易,甚至可以创建一个继承 Controller
的基本控制器,然后从中继承您的所有控制器。
然后您可以将您的控制器+动作与角色存储在数据库中
// get allowed groups for this controller+action from the database (cache this)
// get which AD groups the current user is in (or get from the DB etc)
var userGroups = HttpContext.Current.Request.LogonUserIdentity.Groups
.Translate(typeof(System.Security.Principal.NTAccount))
// check if user in in required group
如果您真的想在每个操作的代码中定义权限,那么只需根据需要将属性添加到属性和属性构造函数。
我没有完全理解你的角色与类型,但在 MVC 中,一切都是一个动作(方法),所以你锁定了单个动作(没有“编辑”,只有一个叫做“编辑”的动作)。
【讨论】:
以上是关于对用户的基于角色的访问控制的主要内容,如果未能解决你的问题,请参考以下文章