Подобно решениям, предложенным @hellangle и @Andreas, я использовал следующий код, чтобы решить эту проблему:
public class CustomizedAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var userAuthInfo = GetUserAuthInfo();
if (!userAuthInfo.IsAuthenticated())
{
filterContext.Result = new RedirectResult(UrlToYourLoginPage);
return;
}
if (!userAuthInfo.IsAuthorized())
{
var result = new ViewResult {ViewName = "UnAuthorized"};
result.ViewBag.Message = "Sorry! You are not authorized to do this!";
filterContext.Result = result;
}
}
}
Конечно, вам нужно реализовать информации авторизации пользователя класса и связанные с ними методы (GetUserAuthInfo, IsAuthenticated, IsAuthorized) в соответствии с вашими конкретными потребностями. Кроме того, View, названный 'UnAuthorized', должен быть помещен туда, где может найти двигатель MVC. Тогда он может быть применен на класс контроллера (указал в ответе @ hellangle в), или способе действия:
[CustomizedAuthorizeAttribute]
public class TargetController : Controller
{
[CustomizedAuthorizeAttribute]
public ActionResult TargetAction()
{
// Your Code
}
}
Для того, чтобы обеспечить различные стратегии управления доступом для различных классов контроллеров и методы действий, реализует конструктор CustomizedAuthorizeAttribute класс, который принимает параметр (ы), представляющий информацию управления доступом, а затем соответственно задает класс CustomizedAuthorizeAttribute.
haha "no rights dude" page ... lol – 2010-12-16 04:43:45