.net

2010-11-18 10 views
6

के लिए केवल मानक वेब फॉर्म (एमवीसी नहीं) के बराबर एक अधिकृतता है, मैं एक परियोजना पर काम कर रहा हूं जो विंडोज़ रोल प्रदाताओं का उपयोग करेगा और मैं कुछ एडी समूहों को कार्यक्षमता सीमित करना चाहता हूं।.net

एमवीसी के साथ, मैं अपने क्रिया विधियों के ऊपर AuthorizeAttribute का उपयोग कर सकता हूं और तदनुसार रीडायरेक्ट कर सकता हूं। क्या मानक वेब फॉर्म एप्लिकेशन (.NET 3.5) के लिए ऐसा कुछ भी है जो एमवीसी का उपयोग नहीं करता है?

उत्तर

4

आप इसे प्राधिकरण तत्व के साथ web.config में सेट कर सकते हैं।

<configuration> 
    <system.web> 
    <authorization> 
     <allow roles="domainname\Managers" /> 
     <deny users="*" /> 
    </authorization> 
    </system.web> 
</configuration> 

मूल रूप से डोमेन समूहों जब <authentication mode="Windows" /> का उपयोग कर भूमिकाओं में अनुवाद कर रहे हैं। आप read more about it on MSDN

+0

सही मुझे लगता है कि मिल गया। लेकिन क्या एमवीसी के साथ आप इसे कैसे कर सकते हैं इसके समान एक विशिष्ट विधि स्तर पर पहुंच प्रतिबंधित करने का कोई तरीका है? –

+0

@ ब्लेयर जोन्स, आपको विधि के भीतर 'if (User.IsInRole (" somerole ")) जैसे चेक करना होगा, मुझे डर है। –

+0

ठीक है धन्यवाद ... यही वह है जो मुझे डर था :( –

3

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन सोचा कि मैं अपना अनुभव साझा करूंगा क्योंकि मैं अभी इस माध्यम से गया हूं। मैं web.config का उपयोग नहीं करना चाहता था। मैं एमवीसी के कार्यान्वयन के समान वेबफॉर्म के लिए एक विशेषता बनाने का एक तरीका ढूंढ रहा था। मुझे Deran Schilling द्वारा एक पोस्ट मिली है जिसे मैंने विशेषता भाग के आधार के रूप में उपयोग किया था।

मैं एक कस्टम IPrincipal

interface IMyPrincipal : IPrincipal 
{ 
    string MyId { get; } 
    string OrgCode { get; } 
    string Email { get; } 
} 

और प्रधान

public class MyPrincipal : IMyPrincipal 
{ 
    IIdentity identity; 
    private List<string> roles; 
    private string email; 
    private string myId; 
    private string orgCode; 

    public MyPrincipal(IIdentity identity, List<string> roles, string myId, string orgCode, string email) 
    { 
     this.identity = identity; 
     this.roles = roles; 
     this.myId = myId; 
     this.orgCode = orgCode; 
     this.email = email; 
    } 

    public IIdentity Identity 
    { 
     get { return identity; } 
    } 

    public bool IsInRole(string role) 
    { 
     return roles.Contains(role); 
    } 

    public string Email 
    { 
     get { return email; } 
    } 
    public string MyId 
    { 
     get { return myId; } 
    } 
    public string OrgCode 
    { 
     get { return orgCode; } 
    } 
} 

बनाया है और पृष्ठ

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] 
public class AdminAuthorizationAttribute : Attribute 
{ 
    public AdminAuthorizationAttribute() 
    { 
     var user = (MyPrincipal)HttpContext.Current.User; 

     if (user.IsInRole("MyAdmin")) 
      return; 

     throw new AccessDeniedException(); 
    } 
} 

पर उपयोग के लिए एक गुण बनाया है और कुछ कस्टम अपवाद

012 बनाया

और अब मैं दिए गए पृष्ठ पर उपयोग के लिए आवेदन कर सकते हैं विशेषता

[AdminAuthorization] 
public partial class Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 
+2

मुझे नहीं लगता कि यह एक बहुत अच्छा उदाहरण है मुझे डर है। विशेषता के निर्माता में कोड है, .NET में आपका कोई नियंत्रण नहीं है गुणों को तत्काल किया जाता है। इसके अतिरिक्त उन्हें कैश किया जा सकता है। इसका मतलब है कि उपयोगकर्ता क्रेडेंशियल्स के लिए आपके कोड में HttpContext पर भरोसा हो रहा है, वह संदर्भ नहीं हो सकता है जो आपको लगता है। यह कुछ परीक्षण मामलों पर काम कर सकता है लेकिन संभावना है – AlexC

+2

@AlexC क्या आपके पास इस कोड के लिए विकल्प नहीं है? (वेबफॉर्म) –

+0

यह कोड वेबफॉर्म में काम नहीं करता है, यह किसी भी एचटीपीएक्सप्शन को फेंक नहीं देता है। –