Job*_*med 5 asp.net asp.net-mvc asp.net-identity-2
我正在研究asp.net mvc 5.我想动态地将控制器的动作方法的权限分配给角色,而不需要在Authorize属性中强制转换角色.
这是场景 - 在我的项目中,我有四个角色 - 学生,教师,项目官员和管理员.我希望管理员可以随时改变每个角色的可访问性.我不想在控制器的每个操作名称之前使用角色名称对authorize属性进行硬编码,因为管理员将无法更改每个角色的权限.
我想创建一个页面,其中控制器的每个操作方法都将列为复选框,管理员可以为角色选择操作复选框.然后,该角色用户将获得这些操作方法的可访问性.
在这里,我想让UI如下 -
任何人都可以通过提供任何建议或代码或链接来帮助我这样做吗?
想象一下,你有服务返回基于控制器和动作名称的角色数组,如下所示:
public class RoleProvider
{
public string[] Get(string controller, string action)
{
// get your roles based on the controller and the action name
// wherever you want such as db
// I hardcoded for the sake of simplicity
return new string[]{"Student", "Teacher"};
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以编写自己的授权属性,如下所示:
public class DynamicRoleAuthorizeAttribute: AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var controller = httpContext.Request.RequestContext
.RouteData.GetRequiredString("controller");
var action = httpContext.Request.RequestContext
.RouteData.GetRequiredString("action");
// feed the roles here
Roles = string.Join("," ,_rolesProvider.Get(controller, action));
return base.AuthorizeCore(httpContext);
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用您的自定义授权属性而不是旧的属性,如下所示:
[DynamicRoleAuthorize]
public ActionResult MyAction()
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6794 次 |
| 最近记录: |