Voici un attribut que j'ai créé et qui peut être utilisé pour diriger vers une action de sécurité non autorisée. il vous permet également de spécifier une raison qui sera transmise à l'action non autorisée sur le contrôleur de sécurité, que vous pouvez ensuite utiliser pour la vue.
Vous pouvez créer n'importe quel nombre de propriétés pour le personnaliser en fonction de votre application particulière, assurez-vous simplement de l'ajouter à RouteValueDictionary.
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public sealed class ApplySecurityAttribute : ActionFilterAttribute
{
private readonly Permission _permission;
public ApplySecurityAttribute(Permission permission)
: this(permission, string.Empty) {}
public ApplySecurityAttribute(Permission permission, string reason)
{
_permission = permission
Reason = reason;
}
public string Reason { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!PermissionsManager.HasPermission(_permission)) // Put security check here
{
var routeValueDictionary = new RouteValueDictionary
{
{ "controller", "Security" }, // Security Controller
{ "action", "Unauthorized" }, // Unauthorized Action
{ "reason", Reason } // Put the reason here
};
filterContext.Result = new RedirectToRouteResult(routeValueDictionary);
}
base.OnActionExecuting(filterContext);
}
}
Voici le contrôleur de sécurité
public class SecurityController : Controller
{
public ViewResult Unauthorized(string reason)
{
var vm = new UnauthorizedViewModel { Reason = reason };
return View(vm);
}
}
Voici la déclaration d'attribut sur un contrôleur que vous souhaitez sécuriser
[ApplySecurity(Permission.CanNuke, Reason = "You are not authorized to nuke!")]
Voici comment PermissionsManager effectue la vérification pour voir si l'utilisateur a les permissions
public static class PermissionsManager
{
public static bool HasPermission(EZTracPermission permission)
{
return HttpContext.Current.GetCurrentUser().Can(permission);
}
}
http://stackoverflow.com/questions/1315524/is-it-possible-to-override-the-default-behavior-of-authorize-in-asp-net-mvc – womp