我使用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
会这样做,但我仍然会点击登录页面。如果我登录,则角色已更改,用户有权查看该页面;但他们应该永远不会看到登录页面。
答案 0 :(得分:0)
您可以在PreRequestHandlerExecute事件上使用HttpModule和hookup。当然这意味着你不会使用与Mvc相关的任何东西,但可能你不需要它。