ASP.NET IAuthorizationFilter OnAuthorization
Привет, я пытаюсь реализовать настраиваемый фильтр авторизации
//The Authourization attribute on a controller
public class CustomAdminAuthorizationFilter : IAuthorizationFilter
{
private readonly IAuthentication _authentication;
public SageAdminAuthorizationFilter(IAuthentication authentication)
{
_authentication = authentication;
}
public void OnAuthorization(AuthorizationContext filterContext)
{
bool result = _authentication.Authorize(filterContext.HttpContext);
}
}
Как вы можете видеть в OnAuthorization, я возвращаю результат, который относится к false.
Что мне нужно, чтобы вернуться, откуда я пришел?
EDIT:
Кажется, что я все время бросаю меня на страницу журнала
Я делаю инъекцию IAuthetication
this.BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0);
Bind<IAuthentication>().To<CustomAuthenticationService>();
Затем я украшаю свое действие в контроллере так.
[Authorize]
public ActionResult Index()
{
ViewBag.Title = "Welcome";
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
В моем web.config Im, использующем
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Должно ли это быть изменено?
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Измените это на Attribute
, а не просто a IAuthorizationFilter
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class SageAdminAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{
readonly IAuthentication _authentication;
public SageAdminAuthorizeAttribute(IAuthentication authentication)
{
_authentication = authentication;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!_authentication.Authorize(filterContext.HttpContext))
filterContext.Result = new HttpUnauthorizedResult();
}
}
Теперь вместо использования [Authorize]
используйте новый атрибут [SageAdminAuthorize]
[SageAdminAuthorize]
public ActionResult Index()
{
ViewBag.Title = "Welcome";
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}