मेरे पास यह वही आवश्यकता थी। मेरे पास मेरा अपना उपयोगकर्ता और भूमिका स्कीमा था और एएसपीनेट सदस्यता स्कीमा में माइग्रेट नहीं करना चाहता था, लेकिन मैं प्राधिकरण और भूमिकाओं की जांच के लिए एएसपी.नेट एमवीसी एक्शन फ़िल्टर का उपयोग करना चाहता था। मुझे वास्तव में क्या करने की आवश्यकता है, यह जानने के लिए खुदाई की उचित मात्रा में करना था, लेकिन अंत में यह अपेक्षाकृत आसान था। मैं आपको परेशानी बचाऊंगा और आपको बताऊंगा कि मैंने क्या किया।
1) मैंने System.Web.Security.MembershipProvider से प्राप्त एक क्लास बनाई है। सदस्यता प्रदाता के प्रमाणीकरण से संबंधित कार्यों के सभी प्रकार के लिए सार तत्वों का एक टन है जैसे पासवर्ड भूलना, पासवर्ड बदलना, नया उपयोगकर्ता बनाना आदि। मैं चाहता था कि मैं अपनी खुद की स्कीमा के खिलाफ प्रमाणित करने की क्षमता रखूं। तो मेरी कक्षा मुख्य रूप से खाली ओवरराइड निहित है। मैं सिर्फ overrode ValidateUser:
public override bool ValidateUser(string username, string password)
{
if (string.IsNullOrWhiteSpace(username) ||
string.IsNullOrWhiteSpace(password))
return false;
string hash = EncryptPassword(password);
User user = _repository.GetByUserName(username);
if (user == null) return false;
return user.Password == hash;
}
2) मैं एक वर्ग कि System.Web.Security.RoleProvider से ली गई बनाया। दोबारा, मेरे पास सिर्फ उन सभी फ्लफ के लिए खाली कार्यान्वयन था जिन्हें मुझे भूमिका बनाने और बदलने की आवश्यकता नहीं थी।
public override string[] GetRolesForUser(string username)
{
User user = _repository.GetByUserName(username);
string[] roles = new string[user.Role.Rights.Count + 1];
roles[0] = user.Role.Description;
int idx = 0;
foreach (Right right in user.Role.Rights)
roles[++idx] = right.Description;
return roles;
}
public override bool IsUserInRole(string username, string roleName)
{
User user = _repository.GetByUserName(username);
if(user!=null)
return user.IsInRole(roleName);
else
return false;
}
3) तब मैं अपने web.config में इन दो वर्गों खामियों को दूर:
<membership defaultProvider="FirstlookMemberProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="FirstlookMemberProvider" type="FirstlookAdmin.DomainEntities.FirstlookMemberProvider, FirstlookAdmin" />
</providers>
</membership>
<roleManager defaultProvider="FirstlookRoleProvider" enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add name="FirstlookRoleProvider" type="FirstlookAdmin.DomainEntities.FirstlookRoleProvider, FirstlookAdmin" />
</providers>
</roleManager>
यह है कि मैं सिर्फ दो तरीकों overrode। डिफ़ॉल्ट प्राधिकरण कार्रवाई फ़िल्टर इन कक्षाओं का उपयोग करेंगे। आपको अभी भी लॉगिन पेज साइन इन करना होगा और साइन आउट करना होगा। इसके लिए सामान्य रूप से मानक रूप प्रमाणीकरण कक्षाओं का उपयोग करें जैसे आप सामान्य रूप से करेंगे।
स्रोत
2009-09-17 14:44:26
+1 के साथ प्राप्त करते हैं। प्रदाता को अनुकूलित करना इसे करने का एक सही तरीका है। यह इंगित करने के लिए धन्यवाद कि यह भी बहुत काम नहीं है। –
ओह, यह इंगित करने के लायक है कि पासवर्ड को वास्तव में हैशिंग से पहले एक नॉन के साथ नमकीन किया जाना चाहिए। –
मुझे इसे पुनर्जीवित करने और आपको परेशान करने के लिए खेद है, लेकिन क्या आपके समाधान पर कुछ और जानकारी प्राप्त करना संभव है? मैं थोड़ा उलझन में हूं कि आपने भूमिका प्रबंधन कैसे किया। – Ciel