我添加和/或从RoleSetter
的角色中删除用户,注销用户,登录用户,但登录页面仍然显示,这告诉我授权已经发生。
我的控制器ActionMethod
引起登录提示,并被装饰为:
[RoleSetter(Order = 0)]
[Authorize(Roles = "project_user", Order = 1)]
public ActionResult Details(int? projectId)
{
...
}
RoleSetter
是一个AuthorizeAttribute,它执行一些逻辑来添加或/或从asp.net-identity中的角色中删除用户,如下所示:
public class RoleSetterAttribute : AuthorizeAttribute
{
public new void OnAuthorization(AuthorizationContext filterContext)
{
// Logic to add and/or remove roles
...
// SignOut then SignIn to reset claims
IAuthenticationManager authenticationManager = filterContext.HttpContext.GetOwinContext().Authentication;
authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);
}
}
在执行授权之前,我的RoleSetter
有没有办法执行我以为设置Order
就可以了,但我还是点击了登录页面。如果我登录,则角色发生了更改,用户有权查看页面;但他们不应该看到登录页面。
您可以在PreRequestHandlerExecute事件上使用HttpModule和连接。当然,这意味着你不会使用任何与Mvc相关的东西,但可能你无论如何都不需要它。