FormsAuthenticationTicket
निर्माता (सबसे मानकों के साथ एक) userData
पैरामीटर जो एक स्ट्रिंग लेता है। यह यहां है कि आप कुछ भूमिकाओं जैसे पाइप (|) या हैश से अलग अपनी भूमिका जोड़ सकते हैं। आप कैसे उपयोग करने की योजना बना रहे हैं आप पर निर्भर है। आप आमतौर पर AuthenticateRequest
ईवेंट पंजीकृत करना चाहते हैं।
private void CreateTicket()
{
var ticket = new FormsAuthenticationTicket(
version: 1,
name: UserName,
issueDate: DateTime.Now,
expiration: DateTime.Now.AddSeconds(httpContext.Session.Timeout),
isPersistent: false,
userData: String.Join("|", arrayOfRoles));
var encryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
httpContext.Response.Cookies.Add(cookie);
}
global.asax
में आप कुछ इस तरह करना होगा उसके बाद:: तो, आप एक टिकट इस था बना सकते हैं
public override void Init()
{
base.AuthenticateRequest += OnAuthenticateRequest;
}
private void OnAuthenticateRequest(object sender, EventArgs eventArgs)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
var decodedTicket = FormsAuthentication.Decrypt(cookie.Value);
var roles = decodedTicket.UserData.Split(new[] {"|"}, StringSplitOptions.RemoveEmptyEntries);
var principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles);
HttpContext.Current.User = principal;
}
}
अब आप IPrincipal वस्तु में भूमिका (HttpContext.Current.User
) है और आप के साथ क्वेरी जब HttpContext.Current.User.IsUserInRole("RoleName")
आपको सच या गलत मिलेगा। इस तरह आप Roles
प्रदाता का उपयोग करने से बचने में सक्षम होना चाहिए।
अपडेट: उपयोगकर्ता प्रिंसिपल को पुनर्स्थापित करने के लिए कॉल करने के लिए एक बेहतर घटना BeginRequest
के बजाय Application_AuthenticateRequest
है। मैंने इसे प्रतिबिंबित करने के लिए कोड अपडेट किया है।
स्रोत
2013-06-05 08:13:04
भूमिकाओं के साथ काम करने के लिए अब आप किस तंत्र का उपयोग कर रहे हैं? –
@HuseinRoncevic मेरी डेटाबेस तालिका में मेरे पास उपयोगकर्ता नाम, पासवर्ड और उपयोगकर्ता के लिए भूमिका है। मैं डेटाबेस तालिका से प्रमाणीकरण टिकट – chamara
पर पुनर्प्राप्त भूमिका को पास करना चाहता हूं, यह सुनिश्चित नहीं है कि यह इस तरह से काम करता है। आप केवल उपयोगकर्ता नाम को कुकी कुकी में डालते हैं और फिर प्रत्येक आने वाले अनुरोध के लिए आप ऑथ कुकी से उपयोगकर्ता नाम पढ़ते हैं और डेटाबेस से अन्य विवरण लोड करते हैं। यह 'एक्शनफिल्टर' में किया जा सकता है। – Suhas