在OnAuthorize之前有办法做点什么吗?

时间:2014-04-11 22:52:42

标签: asp.net-mvc asp.net-identity

我使用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会这样做,但我仍然会点击登录页面。如果我登录,则角色已更改,用户有权查看该页面;但他们应该永远不会看到登录页面。

1 个答案:

答案 0 :(得分:0)

您可以在PreRequestHandlerExecute事件上使用HttpModule和hookup。当然这意味着你不会使用与Mvc相关的任何东西,但可能你不需要它。