Semblables à des solutions suggérées par @hellangle et @Andreas, j'ai utilisé le code suivant pour résoudre ce problème:
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;
}
}
}
Bien sûr, vous avez besoin pour mettre en œuvre l'autorisation de l'utilisateur de l'information de classe et les méthodes connexes (GetUserAuthInfo, IsAuthenticated, IsAuthorized) en fonction de vos besoins spécifiques. Également d'une Vue nommée "non autorisé" doit être mis quelque part le MVC moteur peut trouver. Ensuite, il peut être utilisé sur un contrôleur de classe (souligné dans @hellangle de réponse) ou une méthode d'action:
[CustomizedAuthorizeAttribute]
public class TargetController : Controller
{
[CustomizedAuthorizeAttribute]
public ActionResult TargetAction()
{
// Your Code
}
}
Afin de fournir différentes stratégie de contrôle d'accès pour les différentes classes de contrôleur et des méthodes d'action, met en œuvre un constructeur pour CustomizedAuthorizeAttribute classe qui accepte en paramètre(s) représentant les informations de contrôle d'accès et ensuite Instancier CustomizedAuthorizeAttribute classe en conséquence.