2008-12-16 7 views
4

Je comprends que vous pouvez utiliser l'authentification par formulaire pour accorder/refuser l'accès à certaines pages en fonction des critères de votre choix.Autorisations dans les vues dans ASP MVC

Cependant, je voudrais entrer dans un peu plus précis que cela et dire, avoir différents boutons apparaissent pour les utilisateurs en fonction de leurs autorisations.

Je sais que je pouvais faire quelque chose comme

if(((User)ViewData["CurrentUser"]).IsEmployee)..... 

Mais cela ne semble pas très élégant et pourrait se salir très vite.

Y a-t-il des lignes directrices/outils/caractéristiques du cadre qui pourraient m'aider ici?

Répondre

1

J'ai eu le même problème il y a quelques temps pour une application WPF. Cela pourrait aussi fonctionner pour ASP.NET.

Pour chaque "bouton" (UserControl dans WPF) vous définissez par attribut le rôle nécessaire pour exécuter sa fonctionnalité.

Lors de l'initialisation de votre action, vous créez une liste de tous les «boutons» nécessitant une autorisation spéciale. Avant d'appeler le "return View()", vous appelez une fonction qui réitère tous vos "boutons" spéciaux et définit la visibilité en fonction du rôle de l'utilisateur.

Pour WPF qui fonctionne parce que vous ne pouvez pas appeler la méthode par une demande de get/post ... Pour le web, vous devriez faire quelque chose de plus sophistiqué non seulement masquer/afficher le bouton ...

J'espère cela vous donne au moins une idée ... Cela a très bien fonctionné pour ma mise en œuvre, mais c'était juste un prototype ... Mais je pense que je vais l'utiliser à l'avenir.

PS: Exemple de code se trouve here

+0

Hmm peut-être, mais c'est plus que des boutons, certaines formes et d'autres choses. Merci de toute façon, je vais essayer vos boutons plus tard et peut accorder des rep en conséquence;) – qui

+0

Ouais mais c'est le point. J'ai dit bouton parce que dans mon exemple j'ai utilisé un bouton. Le vous pouvez ajouter l'attribut à un "UserControl" complet et le rendre ou non en fonction du rôle ... Peut-être que cela ne convient pas bien pour le web ... mais c'est bien que vous essayez;) –

6

Utiliser l'authentification basée sur les rôles, puis définissez les rôles de manière appropriée. Ensuite, vous pouvez faire des choses comme:

if (ViewContext.HttpContext.User.IsInRole("vEmployee") { 

L'avantage est que ses fonctionnalités de ASP.NET core - même pas MVC spécifique - donc il va travailler avec tous les possibles fournisseur d'appartenances.

vous pouvez ajouter une surcharge d'aide de vue pour quelque contrôle que vous souhaitez afficher conditionnellement:

public static string TextBox(this HtmlHelper helper, 
    string name, string value, string role, object htmlAttributes) 
{ 
    if helper.ViewContext.HttpContext.User.IsInRole(role) { 
     return helper.TextBox(name, value, htmlAttributes); 
    } 
    else 
    { 
     return null; 
    } 
} 

... et l'appeler:

<%= Html.TextBox("name", "value", "vEmployee", null) %> 
-1

Ne pas le faire. Utilisez le contrôleur pour ce genre de logique

+0

J'ai vu avec beaucoup des champs. Certains champs ne doivent être affichés qu'avec des cas spéciaux. J'ai beaucoup de cas. Donc, devrais-je créer autant de vues que de cas ??? sensationnel... – dariol

Questions connexes