C# 用户和角色管理MVC4
我正在用MVC4编写一个定制的web系统,该系统的一部分要求管理员用户管理公司中的角色和用户,以提供对系统某些区域的访问和权限。系统中有以下模块: 销售 生产 管理团队希望能够在系统中创建角色并对这些角色应用权限。例如,销售角色将被拒绝访问生产,但销售经理可以对生产进行只读访问 我正在寻找一个最好的方法来管理一个单一的管理屏幕这个例子。管理员需要C# 用户和角色管理MVC4,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我正在用MVC4编写一个定制的web系统,该系统的一部分要求管理员用户管理公司中的角色和用户,以提供对系统某些区域的访问和权限。系统中有以下模块: 销售 生产 管理团队希望能够在系统中创建角色并对这些角色应用权限。例如,销售角色将被拒绝访问生产,但销售经理可以对生产进行只读访问 我正在寻找一个最好的方法来管理一个单一的管理屏幕这个例子。管理员需要 创建角色 创建用户 分配角色 为系统中的模块和操作分配角色权限 另外,当角色需要动态分配时,我将如何在控制器级别实现它 [Authorize(Ro
- 创建角色
- 创建用户
- 分配角色
- 为系统中的模块和操作分配角色权限
[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();
}
实现这一点的一种方法是使用具有两级角色的数据模型:
- 集团角色(如销售人员)。用户是组角色的成员,即存在M-N关系Users-GroupRoles
- 许可角色。表示应用程序控制的资源、操作或资源的细粒度权限。GroupRoles和PermissionRoles之间存在M-N关系
GetRolesForUser
方法返回用户的所有PermissionRoles(通过其GroupRole成员身份)
然后,您可以使用标准的.NET API进行授权,而不需要自定义授权属性:
[Authorize(Roles="SomeAction")] // for an MVC Controller
[PrincipalPermission(SecurityAction.Demand, Role = "SomeAction")] // For a method in the BLL
Thread.CurrentPrincipal.IsInRole("SomeAction") // in code