2015-04-10 5 views
7

अपने आवेदन में मैं ASP.NET पहचान का उपयोग कर रहा हूँ और मैं अलग (... शिक्षक, छात्र,) अपने स्वयं के गुण होते हैं कि, के लिए शिक्षक के लिए मैं Experience, Languages Spoken, Certifications, Awards, Affiliations, ... है और छात्र के लिए मैं अलग गुण होते हैं उपयोगकर्ता के प्रकार की है। इसलिए इस तरह से प्रति उपयोगकर्ता अलग-अलग जानकारी के कारण मैं भूमिकाओं का उपयोग नहीं कर सकता। तो वे सभी वास्तव में उपयोगकर्ता हैं मेरा मतलब है कि वे मेरी साइट पर लॉगिन कर सकते हैं। First Name, Last Name, Email, Password अब तुम्हें क्या लगता है और क्या ऐसा करने के लिए सबसे अच्छा विकल्प है: इसके अलावा वे साइन अप करने के लिए आम जानकारी है? मैं प्रत्येक उपयोगकर्ता है कि IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim> से विरासत के लिए वर्ग बनाना चाहिए? कोई विचार?कैसे ASP.NET पहचान में विभिन्न उपयोगकर्ता प्रकार को परिभाषित करने के लिए?

पुनश्च: मैं कुछ समाधान है कि ऐसा करने के लिए, उदाहरण के लिए here सिफारिश दावा उपयोग करने के लिए है लेकिन यह मेरे लिए काफी स्पष्ट नहीं है मिल गया है, वास्तव में दावा पहेली का कठिन हिस्सा हैं और मैं नहीं मिला है कि वे क्या कर रहे हैं? :), उदाहरण होना बेहतर होगा। धन्यवाद

+0

"इसलिए इस तरह से मैं प्रति उपयोगकर्ता की अलग-अलग जानकारी के कारण भूमिकाओं का उपयोग नहीं कर सकता।" कक्षा गुण और भूमिकाएं दो पूरी तरह से अलग चीजें हैं; कक्षा गुणों के बावजूद आप अपने आवेदन की सुरक्षा आवश्यकताओं के अनुरूप जो भी भूमिका निभा सकते हैं। – IrishChieftain

+0

हाँ मुझे पता है। मेरा मतलब है कि मुझे उन गुणों की आवश्यकता है जो उपयोगकर्ताओं की भूमिका नहीं हैं। –

+0

शायद यह आलेख आपको सही दिशा में घुमाने में मदद करेगा: http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net- डेवलपर / – rogerdeuce

उत्तर

8

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 तालिका से अतिरिक्त जानकारी प्राप्त करने के लिए आप पर निर्भर रहेंगे।

1

के बाद से सभी उपयोगकर्ताओं को एक ही गुण यह भावना एक "उपयोगकर्ता" वर्ग कि शिक्षक, छात्रों के लिए एक ही होगा सभी गुणों की पकड़ करने के लिए बनाने के लिए जाता है उनके कुछ करना होगा, आदि

मैं करूंगा फिर प्रत्येक उपयोगकर्ता प्रकार के लिए केवल उस गुण के साथ एक वर्ग बनाएं जो उस प्रकार के उपयोगकर्ता के लिए विशिष्ट हो। इस वर्ग में मैं UserId शामिल के रूप में संपत्ति में से एक तो आप अपनी व्यक्तिगत प्रकार (ओं) के लिए अपने मुख्य समूह से एक रिश्ता होता है। नीचे देखें:

उपयोगकर्ता वर्ग: प्रयोक्ता-आईडी (प्राथमिक कुंजी), प्रथम, अंतिम नाम, लॉग इन, पासवर्ड, आदि

शिक्षक वर्ग: प्रयोक्ता-आईडी (विदेशी कुंजी), ग्रेड सिखाया, अनुभव, पुरस्कार, आदि

छात्र कक्षा: प्रयोक्ता-आईडी (विदेशी कुंजी), ग्रेड, +०१२३५१६४१०ऑनर्स, आदि

आपके द्वारा किए जाने वाले कार्यों को करने के कई तरीके हैं, इसलिए यह केवल एक सुझाव है। सौभाग्य!

संबंधित मुद्दे