ajbeaven's answer के आधार पर, मैंने इसे एक भूमिका के बजाय भूमिकाओं की सूची में विस्तारित करने में कामयाब रहे।
सबसे पहले प्रतिबंधित वर्ग:
public class Restrict : AuthorizeAttribute {
private List<string> _roles;
public string Roles {
get {
string roles = "";
if (_roles != null && _roles.Count > 0) {
int counter = 0;
foreach (string role in _roles) {
counter++;
if (counter == _roles.Count) {
roles = role;
} else {
roles += role + ",";
}
}
}
return roles;
}
set {
_roles = new List<string>();
string[] roles = value.Split(',');
foreach (string role in roles) {
_roles.Add(role);
}
}
}
public Restrict() {
_roles = new List<string>();
}
protected override bool AuthorizeCore(HttpContextBase httpContext) {
bool result = true;
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
foreach (string role in _roles) {
if (httpContext.User.IsInRole(role)) {
result = false;
break;
}
}
return result;
}
}
फिर पूरे समाधान पुन: प्रयोज्य बनाने के लिए AppRoles वर्ग जोड़ें:
public static class AppRoles {
public const string Role1 = "Role1";
public const string Role2 = "Role2";
}
उपयोग:
[Authorize]
[Restrict(Roles = AppRoles.Role1 + "," + AppRoles.Role2)]
public ActionResult Index() {
return View();
}
मैं कहाँ स्विचिंग एक परिदृश्य कल्पना नहीं कर सकते एक सफेद सूची कार्यान्वयन से एक सफेद सूची कार्यान्वयन से समझ में आता है। –
मैं नहीं चाहता कि मेरे प्रशासक ग्राहक से संबंधित नियंत्रकों तक पहुंच सकें, लेकिन मुझे स्पष्ट रूप से गैर-अधिकृत उपयोगकर्ताओं और ग्राहकों को सक्षम होने की आवश्यकता है। – ajbeaven
ऐसे कई मामले हैं जहां यह समझ में आता है, और अधिकांश प्राधिकरण प्रणालियों में इनकार करने के लिए समर्थन शामिल है। एक परिदृश्य पर विचार करें जहां सभी उपयोगकर्ताओं को विशिष्ट भूमिका के सदस्यों को छोड़कर कुछ करने की अनुमति है। – ShadowChaser