apporach # 1:
दावा दृष्टिकोण हो सकता है जाने का रास्ता। तो अगर आप सामान्य तरीके से IdentityUser
से निकाले जाते हैं और व्युत्पन्न वर्ग के लिए आम गुण जोड़ें। फिर प्रत्येक प्रकार के उपयोगकर्ता के लिए आप UserManager.AddClaimAsync
का उपयोग करके अतिरिक्त दावों को जोड़ देंगे।
तो, उदाहरण के लिए, मान लें कि आप AppUser
नामक एक नई श्रेणी उपयोगकर्ता कक्षा बनाते हैं। इसके बाद आप कर सकते हैं:
AppUser teacher = new AppUser { /* fill properties here */ };
/* Save User */
await userManager.AddClaimAsync(teacher.Id, new Claim("app_usertype", "teacher"));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_grade", 4));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_exp", 10));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_awards", "Award1,Award2"));
await userManager.AddClaimAsync(teacher.Id, new Claim("app_langspoken", "English,French,German"));
AppUser student = new AppUser { /* fill properties here */ };
/* Save User */
await userManager.AddClaimAsync(student.Id, new Claim("app_usertype", "student"));
await userManager.AddClaimAsync(student.Id, new Claim("app_grade", 2));
इन उपयोगकर्ताओं के विभिन्न प्रकार के लिए अलग अलग दावों जोड़ देगा। तो teacher
का दावा है कि "10" के "एप_एक्सपेरियंस", "एप_वार्ड्स" "अवार्ड 1" और "अवार्ड 2" आदि का दावा है। दूसरी तरफ student
का दावा है कि "2" का केवल "app_grade" है।
असल में, पहला पैरामीटर दावा के प्रकार की पहचान करता है और दूसरा पैरामीटर वह डेटा है जो उस दावे का बैक अप लेता है। प्रकार कुछ भी हो सकता है, इसलिए कुछ ऐसा चुनें जो आपके एप्लिकेशन को समझ में आता है और शायद प्रत्येक नाम को दूसरों से अलग करने के लिए उपसर्ग कर सकता है। इस मामले में मैंने अभी "एप" उपसर्ग किया है।
फिर आप UserManager.GetClaimsAsync
का उपयोग एक उपयोगकर्ता के लिए सभी दावों हो और दावा आप में रुचि रखते हैं के लिए लौट आए सूची खोज करने के लिए कर सकते हैं।
कार्य # 2
अन्य दृष्टिकोण बनाने के लिए किया जाएगा AppUser
कक्षा और फिर Teacher
और Student
कक्षा जो AppUser
से ली गई है। इन कक्षाओं में आप उन गुणों को जोड़ देंगे जो अन्यथा ऊपर दिए गए उदाहरण में दावों के रूप में जोड़े जाएंगे।
इसका मामूली नकारात्मक पक्ष यह है कि आपको इन विभिन्न उपयोगकर्ताओं में से प्रत्येक के लिए अलग-अलग तालिकाओं को एएसपी.NET पहचान उपयोगकर्ता तालिका में वापस लेना होगा।
साथ ही, का उपयोग कर FindByUserNameAsync
, FindByEmailAsync
, आदि, केवल कभी एक ही प्रकार के वापस आ जाएगी TUser
की, इस मामले में, AppUser
। साथ ही, ये विधियां केवल एक तालिका, AspNetUsers
से पूछेंगी, इसलिए प्रासंगिक Teacher
या Student
तालिका से अतिरिक्त जानकारी प्राप्त करने के लिए आप पर निर्भर रहेंगे।
"इसलिए इस तरह से मैं प्रति उपयोगकर्ता की अलग-अलग जानकारी के कारण भूमिकाओं का उपयोग नहीं कर सकता।" कक्षा गुण और भूमिकाएं दो पूरी तरह से अलग चीजें हैं; कक्षा गुणों के बावजूद आप अपने आवेदन की सुरक्षा आवश्यकताओं के अनुरूप जो भी भूमिका निभा सकते हैं। – IrishChieftain
हाँ मुझे पता है। मेरा मतलब है कि मुझे उन गुणों की आवश्यकता है जो उपयोगकर्ताओं की भूमिका नहीं हैं। –
शायद यह आलेख आपको सही दिशा में घुमाने में मदद करेगा: http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net- डेवलपर / – rogerdeuce