ajbeaven's answer dayanarak, bir rol yerine Roller listesine genişletmeyi başardım.
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;
}
}
Sonra bütün çözüm yeniden kullanılabilir kılınması AppRoles sınıfını ekleyin::
Öncelikle sınıf sınırla
public static class AppRoles {
public const string Role1 = "Role1";
public const string Role2 = "Role2";
}
Kullanımı: anahtarlama nerede
[Authorize]
[Restrict(Roles = AppRoles.Role1 + "," + AppRoles.Role2)]
public ActionResult Index() {
return View();
}
Ben bir senaryo hayal edemiyorum beyaz liste uygulamasından kara liste uygulamasına kadar anlamlı olacaktır. –
Yöneticilerimin müşteri ile ilgili denetleyicilere erişmesini istemiyorum, ancak kesinlikle yetkili olmayan kullanıcılara ve Müşteriler'e gereksinim duyuyorum. – ajbeaven
Bunun anlamlı olduğu birçok durum vardır ve çoğu yetkilendirme sistemi inkar için destek içerir. Tüm kullanıcıların belirli bir rolün üyeleri dışında bir şey yapma izninin olduğu bir senaryo düşünün. – ShadowChaser