63 votes

Comment pouvons-nous définir l'autorisation pour l'ensemble de la zone ASP.NET MVC?

J'ai une zone d'Admin, et je veux que seul les Admins pour entrer dans la zone. J'ai envisagé d'ajouter la personne Autorisée de l'attribut à chaque contrôleur dans la zone d'Admin. N'est-il pas une solution élégante ou cette fonctionnalité est-elle pas là, dans le cadre lui-même?

EDIT: Je suis désolé, je dois avoir parlé plus tôt. Je suis en utilisant une mesure AuthorizedAttribute dérivé de AuthorizeAttribute.

55voto

Levi Points 22222

Web.config à base de sécurité ne devrait jamais être utilisé dans une application MVC. La raison pour cela est que plusieurs URLs peut frapper un contrôleur, et de mettre ces contrôles dans le Web.config invariablement manque quelque chose. Rappelez - vous- les contrôleurs ne sont pas associés à des zones, les routes sont associés à des zones. Le MVC contrôleur de l'usine sera heureux de servir les contrôleurs de Domaines/ dossier pour les non-zone demandes si il n'y a pas de conflit.

Par exemple, à l'aide de la structure de projet par défaut, l'ajout d'une zone d'Admin, avec un AdminDefaultController, vous pouvez frapper le contrôleur via /Admin/AdminDefault/Index et /AdminDefault/Index.

La seule solution est de placer votre attribut sur un contrôleur de la classe de base et veiller à ce que chaque contrôleur à l'intérieur de la zone de sous-classes que la classe de base.

49voto

Quango Points 1098

J'ai juste été enquêter sur cette même question. Car il n'est pas possible de sécuriser les contrôleurs en fonction de domaines, une option plus simple qui vient à l'esprit.

Créer un contrôleur de base définition pour chaque zone qui remplace le Contrôleur, et ajouter de la sécurité exigent à présent. Ensuite vous avez juste à vous assurer que chaque contrôleur dans la zone de remplacements de AreaController au lieu de Contrôleur. Par exemple:

/// <summary>
/// Base controller for all Admin area
/// </summary>
[Authorize(Roles = "Admin")]
public abstract class AdminController : Controller { }

Il n'exigent toujours que vous obtenez de chaque contrôleur dans la zone d'administration de cette base,

public class HomeController : AdminController
{
    // .. actions
}

mais au moins, vous avez un seul point dans lequel vous pouvez définir la sécurité pour la région.

12voto

John Points 690

Si l'ensemble de vos admin code est dans un contrôleur, puis ajouter Autoriser à l'ensemble de la classe.

[Authorize]
public class AdminController : Controller
{
     .......
}

-5voto

Ric Tokyo Points 5465

.. très grossièrement, je crois que vous voulez quelque chose de ce genre?

Rapide et sale rôle de gestion

[Authorize(Roles = "Admins")]
public ActionResult Register()
{
  ViewData["roleName"] = new SelectList(Roles.GetAllRoles(), "roleName");
  ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
  return View();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X