用户和角色管理

本文关键字:管理 角色 用户 | 更新日期: 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