我有一个控制器,我想要两个角色才能访问它.1-admin或2-moderator
我知道你可以做[授权(角色="管理员,版主")]但我在枚举中有我的角色.凭借枚举,我只能授权一个角色.我无法弄清楚如何授权两个.
我尝试了类似[Authorize(Roles = MyEnum.Admin,MyEnum.Moderator)]但不会编译的东西.
有人曾经这样说过:
[Authorize(Roles=MyEnum.Admin)]
[Authorize(MyEnum.Moderator)]
public ActionResult myAction()
{
}
Run Code Online (Sandbox Code Playgroud)
但它不能作为OR.我认为在这种情况下,用户必须是BOTH角色的一部分.我忽略了一些语法吗?或者这是我必须推出自己的自定义授权的情况?
更新:感谢此处的帮助,我创建了以下解决方案:
public class CustomAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
// Returns HTTP 401 - see comment in HttpUnauthorizedResult.cs
// If user is not logged in prompt
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
// Otherwise deny access
else
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {
{"controller", "Account"},
{"action", "NotAuthorized"}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
我从NerdDinner开始,使用FormsAuthentication和ActiveDirectory作为我的会员提供者.我通过我的数据库使用Global.asax和AccountController(下面)添加了对角色的支持.
所以现在在我的控制器中,我的Authorize属性设置为仅限admin的角色(下面).我登录的用户是作者.当我点击删除时,它会要求我登录,即使我已经这样做了.我在哪里可以使用逻辑返回拒绝访问视图?
的Global.asax.cs
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null || authCookie.Value == "")
{ …Run Code Online (Sandbox Code Playgroud)