2011-04-08 22 views
14

ASP.NET MVC 3'te özelleştirilmiş bir yetkilendirme oluşturmam gerekiyor. Uygulamada, yetkilendirme 5 tabloda tanımlanır: kullanıcılar, gruplar, kullanıcı grupları, haklar, grouprights. Bir kullanıcı birkaç gruba ait olabilir ve her hak da birkaç gruba atanabilir. Her denetleyici eylemine bir RightID atanır.Geçerli kullanıcıyı ASP.NET MVC 3'te denetleyiciye ve eylem adına karşı yetkilendirin

Yerleşik yetkilendirme bu kuruluma uygun olamaz, bu nedenle özelleştirilmiş bir AuthorizeAttribute oluşturmaya çalıştım. AuthorizeCore'u geçersiz kılarken, denetleyici adına ve işlem adına erişimim olmadığını fark ettim.

Bir şekilde yönlendiriciden denetleyici ve eylem adı almak için AuthorizeCore içindeki Request.RawUrl ayrıştırmasını isteyebilir miyim? Ya da istediğimi yapmanın başka bir yolu var mı?

cevap

22
protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    var routeData = httpContext.Request.RequestContext.RouteData; 
    var controller = routeData.GetRequiredString("controller"); 
    var action = routeData.GetRequiredString("action"); 
    ... 
} 
+2

Bu yüzden kontrolöre ve işlem adına erişimim var :) –

1

Bunu, tüm HttpContex öğelerine erişebileceğiniz Eylem Filtreleri kullanarak gerçekleştirebilirsiniz.

public class MyAuthorizeAttribute : ActionFilterAttribute, IAuthorizationFilter 
{ 

    #region Implementation of IAuthorizationFilter 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
       // ... implementation 

       // filterContext.Controller is the controller 
       // filterContext.RouteData is all the route data 
+1

ben çünkü çıkış önbelleği ile bazı sorunun kendi yetki filtreyi uygulamak gerektiğini okumuştum. Bunun MVC 3'te hala bir sorun olup olmadığından emin değilim. –