같은 당신은 주위에 그것을 다른 방법을하고 role1의 존재 대신 role2의 부재를 확인 간단하게 할 수있다. 또는 원하는 것을 수행하고 사용자가 지정된 역할에 있지 않음을 확인하는 자체 DenyAttribute를 개발할 수 있습니다.
[HandleError]
[Authorize(Roles = "role1, role2")]
public class AdminController : Controller
{
[Authorize(Roles = "role1")]
public ActionResult ResultPage(string message)
{
ViewData["message"] = message;
return View();
}
}
public class DenyAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
if (Users.Length > 0 && Users.Split(',').Any(u => string.Compare(u.Trim(), user.Identity.Name, StringComparer.OrdinalIgnoreCase))) {
return false;
}
if (Roles.Length > 0 && Roles.Split(',').Any(u => user.IsInRole(u.Trim()))) {
return false;
}
return true;
}
}
정말 개인이 아닌'_usersSplit' 및'_rolesSplit' 변수를 보호하고 싶습니다. 분리를 다시 구현하는 대신 재사용 할 수 있습니다. – tvanfosson