微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用MVC的AuthorizeAttribute和多组角色?

如何解决使用MVC的AuthorizeAttribute和多组角色?

| 我要做的是对动作处理程序进行两级角色检查。例如,“要求用户至少属于以下一组”:SysAdmins,“经理”和“至少属于以下一组”:人力资源,薪资,执行人员。 最初的猜测是这可能是实现此目的的方法,但我不认为这是:
[Authorize(Role=\"SysAdmins,Managers\")]
[Authorize(Role=\"HR,Payroll,Executive\")]
public ActionResult SomeAction()
{
    [...]
}
我是否需要扮演自己的自定义属性才能使用Role1和Role2或类似的东西?还是有更简单/更好的方法来做到这一点?     

解决方法

        您将需要自己的属性。这是我的:
public class AuthorizationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var portalModel = ContextCache<PortalModel>.Get(ContextCache.PortalModelSessionCache);

        var requestedController = filterContext.RouteData.GetRequiredString(\"controller\");
        var requestedAction = filterContext.RouteData.GetRequiredString(\"action\");

        var operation = string.Format(\"/{0}/{1}\",requestedController,requestedAction);

        var authorizationService = IoC.Container.Resolve<IAuthorizationService>();

        if (!authorizationService.IsAllowed(AccountController.GetUserFromSession(),operation))
        {
            filterContext.Controller.ViewData[\"Message\"] = string.Format(\"You are not authorized to perform operation: {0}\",operation);
            filterContext.HttpContext.Response.Redirect(\"/Error/NoAccess\");
        }
        else
        {
        }

    }

}
    ,        没有内置的方法可以执行您想要的操作。您将不得不编写自己的新属性,或者在操作内部添加检查,如果用户角色未通过检查,则返回UnauthorizedActionResult。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。