2010-01-23 4 views
0

Dites que vous voulez afficher un menu qui a beaucoup d'éléments ... Certains éléments sont exclusifs aux utilisateurs ayant un rôle "administrateur". Je sais comment limiter les méthodes des contrôleurs utilisantAide avec asp.net mvc autorisation

[Authorize(Roles = "Administrators")] 

mais je veux trouver un moyen d'afficher une chose HTML spécifique en fonction des rôles des utilisateurs

exemple

<ul> 
<li>Menu Item 1</li> 
<% //if is admin%> 
<li>Menu Item 2 (for admins only)</li> 
</ul> 

Comment puis-je Est-ce que thiis?

Répondre

3
<ul> 
<li>Menu Item 1</li> 
<% if(Roles.IsUserInRole("Administrators")) { %> 
<li>Menu Item 2 (for admins only)</li> 
<% } %> 
</ul> 
+0

Nice et simple. Seul inconvénient est que la vue est maintenant couplée à des rôles, ce qui peut ou peut ne pas être mieux que d'avoir l'action couplée à des rôles, même si je m'attends à ce qu'il ne soit généralement pas mieux. –

2

Deux façons de le faire. Si vous passez vos éléments de liste dans la vue par ViewData alors votre action ressemblerait à ceci:

public ViewResult Menu() { 
    var list = new string[]{ "Menu Item 1" }; 
    if(HttpContext.User.IsInRole("Administrators")) 
    list.Add(Menu Item 2 (for admins only)"); 
    ViewData["MenuItems"] = list; 
    return View(); 
} 

Sinon, vous pouvez simplement définir une valeur dans votre ViewData pour indiquer le point de vue si l'on doit afficher les valeurs admin.

public ViewResult Menu() { 
    ViewData["DisplayAdminItems"] = HttpContext.User.IsInRoles("Administrators"); 
} 

Vous ne voulez pas utiliser le filtre AUTORISER parce que vous voulez permettre aux non-administrateurs d'accéder à cette action. Je suppose que vous pouvez aussi avoir deux actions, une qui a le filtre Authorize et une qui ne le fait pas. Cependant, cela force tous les liens et redirections vers ces actions pour décider lequel utiliser.

+0

Je ne comprends pas comment je suis supposé utiliser l'une ou l'autre de ces solutions .... pouvez-vous être plus clair? ... dans quel contrôleur ces méthodes sont-elles censées être? – ignaciofuentes