użyć niestandardowego AuthorizationFilter jak poniższych:Get ActionName, ControllerName i AreaName i przekazać go w ActionFilter Attribute
public class ActionAuthorizeAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) {
if(!httpContext.User.Identity.IsAuthenticated)
return false;
if(IsUserExcluded())
return false;
else
return IsRoleAuthorize(httpContext);
}
}
używam tego filtra na górze każdej akcji mam, a do odprawy jest upoważniony, potrzebna nazwa akcji, nazwa kontrolera i nazwa obszaru. Czy istnieje sposób na uzyskanie tych nazw w metodzie AuthorizeCore()
, takiej jak użycie System.Web.HttpContextBase
? jeśli odpowiedź brzmi nie, to jak mogę to imiona i przekazać go do atrybutu, oczywiście nie chcę, aby dodać każdą nazwę strony, faktycznie coś ViewContext.RouteData.Values["Controller"]
w sterownikach:
[ActionAuthorize(actionName=Action, controller=ControllerName, area=AreaName)]
public ActionResult Index() {
return View();
}
Czy ktoś ma jakiś pomysł o tym?
„Można pobrać je z RouteData” Is not dobra odpowiedź. ** Teraz ** został zredagowany, powrócę. – gdoron
Może to być tylko w ASP.NET MVC 4, ale obszar znajduje się w rd.DataTokens ["obszar"]. –
Powinieneś zmienić wiersz var rd = httpContext.Request.RequestContext.RouteData; do var rd = HttpContext.Current.Request.RequestContext.RouteData; lepiej używać standardowego niż parametru :) –