У меня есть сценарий, который я не был в состоянии решить:UrlHelper и ViewContext внутри авторизации атрибута
Я играл вокруг с созданием своего собственного атрибута пользовательского авторизации для MVC. Основной бит функциональности, который я хотел бы добавить, - это возможность изменять, где пользователь перенаправляется, если они не находятся в определенной роли. Я не возражаю, что система отправляет их обратно на страницу входа в систему, если они не аутентифицированы, но я бы хотел выбрать, куда их отправлять, если они аутентифицированы, но не имеют права доступа к этому методу действий.
Вот то, что я хотел бы сделать:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public string Action;
public string Controller;
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
// if User is authenticated but not in the correct role
string url = Url.Action(this.Action, this.Controller);
httpContext.Response.Redirect(url);
}
}
И в качестве дополнительного бонуса, я хотел бы иметь доступ к ViewContext и TempData прежде чем сделать редирект.
Любые мысли о том, как я могу получить экземпляр UrlHelper и ViewContext в атрибуте?
Brilliant, ТНХ. Посмотрев на ваш ответ, я понял, что могу просто спросить: «Как мне получить доступ к AuthorizationContext». Как только у меня это, я опасен. –
Примечание: реализация метода OnAuthorization() не является тривиальным упражнением. Если вы решили переопределить OnAuthorization() вместо AuthorizeCore(), добавьте код в OnAuthorization(), чтобы отключить или перехватить кэширование вывода. См. Http://forums.asp.net/p/1533590/3737756.aspx для получения дополнительной информации. – Levi