2009-03-06 23 views
0

Kullanıcının yetki ayrıntılarını tutmak için bir ışık oturumu nesnesi kullanan özel bir kimlik doğrulama yöntemi yapıyorum. Şimdi her sayfanın (özellikle üstatların çocuk sayfaları) bir kullanıcının sayfaya erişimi olup olmadığını anlayabilmesini istiyorum.Çocuk sayfalarıyla ASP.NET'te özel yetkilendirme

Bir sayfa sınıfı oluşturmalı ve bundan alt sayfalar türetmeli miyim?

Uygulamanın hangi rollere hangi sayfaya erişebileceğini bilmesinin en iyi yolu nedir?

cevap

0

Yetkilendirmede daha fazla esnekliğe ihtiyacınız varsa, özel bir sayfa sınıfıyla devam etmelisiniz. Aksi halde, Web.config yeterli olmalıdır.

0

Özel bir rol sağlayıcısıyla takarsanız, bunun için asp.net yapılandırmasına güvenebilirsiniz. Daha sonra yetkilendirmeyi yapılandırmak için web.config normal bir yaklaşım kullanmak için olsun

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(
    "~/admin/test.aspx", principal, "GET" 
); 

: Eğer kullanıcının belirli bir sayfaya erişmek için yetkili olup olmadığı kontrol sağlayan bir yöntem yoktur. Bunu yaparken, sayfalar aynı klasördeyse, bu klasöre bir web.config ekleyebilir ve yetkilendirmeyi uygun şekilde yapılandırabilirsiniz.

0

aynı senaryolarda ben bir klasörde kimlik gereken sayfaları koymak ve ben böyle kimlik doğrulamasını yapılandırmak için web.config konum öğesini tanımlamak:

<location path="protected"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 
1

Ben baz sayfa yaklaşım sevmiyorum. Bana göre güvenlik konularını kontrol etmek için çok geç. Kendi HttpModule'ınızı oluşturarak, yetkilendirme bilgilerinin bir veritabanında/xml/... içinde saklanmasını veya sayfadaki yansımayı kullanarak okuduğunu kontrol edebilirsiniz.

context.Handler, yürütmekte olduğunuz sınıf sayfasını tutacaktır. Böylece böyle bir şey yapabilirsiniz:

kullandığım kod parçası kopyalama, o rolleri, kamu sayfaları kontrol eder resimler ve komut dosyaları (ama siz de bunu yapabilirdi) için onay atlar:

// In the HttpModule: 
    public void context_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     HttpContext context = HttpContext.Current; 

     // Don´t validate permissions if the user wasn´t allowed by the asp.net security 
     // Neighter the advanced (custom) permissions are validated for non ASPX files. 
     if (!context.Request.FilePath.EndsWith(".aspx") || !context.User.Identity.IsAuthenticated) 
      return; 

     // Give full access to the unathorized error page, and logins, and so on... 
     string pageClass = context.Handler.GetType().BaseType.FullName; 

     string param = context.Request["p"]; 
     if (!string.IsNullOrEmpty(param)) 
      pageClass += "@" + param; 

     if (SecurityService.IsFullTrustClass(pageClass)) 
      return; 

     if (SecurityService.Context.CurrentPerson == null) 
     { 
      LogOff(); 
      return; 
     } 

     // Verify access permissions for the current page 
     IList<Role> roles = SecurityService.Context.CurrentPerson.Roles; 
     bool allow = SecurityService.HasAccessPermission(pageClass, roles); 

     if (!allow) 
     { 
      LogOff(); 
     } 
    } 
İlgili konular