/ / मूल उपयोगकर्ता भूमिकाओं को लागू करने के लिए एक सरल तरीके की तलाश में - c #, प्राधिकरण, asp.net-mvc-5, भूमिकाएं, पहचान

मूल उपयोगकर्ता भूमिकाओं को लागू करने के लिए एक सरल तरीके की तलाश में - c #, प्राधिकरण, asp.net-mvc-5, भूमिकाएं, पहचान

मैं विंडोज प्रमाणीकरण का उपयोग करके इंट्रानेट एप्लिकेशन का निर्माण कर रहा हूं और मैंने अपने उपयोगकर्ताओं को अपने स्थानीय डीबी के लिए खींच लिया है, केवल सक्रिय निर्देशिका से मुझे आवश्यक जानकारी रखते हुए।

मैं अपने उपयोगकर्ताओं (व्यवस्थापक या उपयोगकर्ता) को भूमिकाएँ सौंपना चाहता हूं और व्यवस्थापक दृश्यों को प्रतिबंधित करना चाहता हूं।

क्या बिना रुके ऐसा करने का एक सरल तरीका हैपहचान मार्ग? मैं इसे देख रहा था और यह overkill और ईमानदारी से भ्रामक लगता है। क्या उपयोगिता वर्ग बनाने का कोई तरीका होगा जो कि एनोटेशन के रूप में इस्तेमाल किया जा सकता है और वर्तमान उपयोगकर्ता भूमिका संपत्ति के आधार पर केवल विचारों को प्रतिबंधित कर सकता है?

उत्तर:

उत्तर № 1 के लिए 1

मुझे रुचि रखने वालों के लिए एक सरल उपाय मिला। मैंने किसी भी भूमिका प्रदाता का पूरी तरह से उपयोग करने से बचने का फैसला किया क्योंकि आपको वास्तव में एक ऐसी विधि की आवश्यकता है जो अनुरोध को प्रमाणित करती है और दूसरा उपयोगकर्ता की भूमिका की जांच करने के लिए है। अपने Global.asax में मैंने निम्नलिखित विधि जोड़ी है। इस ब्लॉग पोस्ट से लिया गया:

void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
var ctx = HttpContext.Current;
if (ctx.Request.IsAuthenticated)
{
string[] roles = LookupRolesForUser(ctx.User.Identity.Name);
var newUser = new GenericPrincipal(ctx.User.Identity, roles);
ctx.User = Thread.CurrentPrincipal = newUser;
}
}

आपको खुद को लागू करने का एकमात्र तरीका लुकअप रॉल्सफॉरयूज़र है। मेरा ऐसा दिखता है (Linq आपके डेटाबेस संरचना पर निर्भर करेगा, मेरे पास मेरे लिए 3 टेबल हैं: उपयोगकर्ता, भूमिका और User_Role):

public string[] LookupRolesForUser(string username)
{
using (MyContext db = new MyContext())
{
var user = db.Users.FirstOrDefault(u => u.Username.Equals(username, StringComparison.CurrentCultureIgnoreCase) || u.Email.Equals(username, StringComparison.CurrentCultureIgnoreCase));

var roles = from ur in user.Roles
from r in db.Roles
where ur.RoleId == r.RoleId
select r.RoleName;
if (roles != null)
return roles.ToArray();
else
return new string[] { }; ;
}
}

तब आप अपने नियंत्रकों में प्राधिकृत वर्षगांठ का उपयोग इस प्रकार कर सकते हैं:

 [Authorize(Roles = "Administrator")]
public class AdminController : BaseController