用户和角色管理
本文关键字:管理 角色 用户 | 更新日期: 2023-09-27 18:03:15
我正在MVC4中编写一个定制的web系统,该系统的一部分需要Admin用户来管理公司中的角色和用户,以提供对系统某些区域的访问和权限。系统包含以下模块:
销售生产
管理团队希望能够在系统中创建角色并向这些角色应用权限。例如,销售角色将被拒绝访问生产,但销售经理可以对生产具有只读访问权限。
我正在寻找管理单个管理屏幕的最佳方法的一个例子。Admin需要
- 创建角色
- 为系统中的模块和操作分配角色权限
另外,我如何在控制器级别实现它,因为角色需要动态分配?
[Authorize(Roles="Sales")] // needs to be dynamic
public ActionResult SalesIndex(){
return View();
}
如有任何意见,不胜感激
谢谢
您需要像这样创建自定义的AuthorizeAttribute
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var userIdentity = httpContext.User.Identity;
if (!userIdentity.IsAuthenticated)
return false;
var rd = httpContext.Request.RequestContext.RouteData;
string currentAction = rd.GetRequiredString("action");
if(currentAction == "SalesIndex")
{
return IsUserIsInRoleForTheView(userIdentity.Name);
}
return true;
}
}
[CustomAuthorize]
public ActionResult SalesIndex()
{
return View();
}
要做到这一点,一种方法是使用具有两层角色的数据模型:
-
GroupRoles(如Sales)。用户是组角色的成员,即存在M-N关系Users - GroupRoles
-
PermissionRoles。表示由应用程序控制的资源或操作或资源的细粒度权限。GroupRoles和PermissionRoles之间存在M-N关系
你将有一个自定义的管理UI来分配用户到GroupRoles和GroupRoles到PermissionRoles。
你也可以有一个自定义的RoleProvider来"扁平化"这个模型,即GetRolesForUser
方法返回一个用户的所有PermissionRoles(通过他的GroupRole成员)。
你可以使用标准的。net api进行授权,而不需要自定义的Authorize属性:
[Authorize(Roles="SomeAction")] // for an MVC Controller
[PrincipalPermission(SecurityAction.Demand, Role = "SomeAction")] // For a method in the BLL
Thread.CurrentPrincipal.IsInRole("SomeAction") // in code