2009-04-29 9 views
6

Je souhaite afficher/masquer certaines parties d'une vue en fonction du statut d'authentification ou des rôles. Pour mes actions de contrôleur, j'ai étendu ActionFilterAttribute afin que je puisse attribuer certaines actions.ASP.NET MVC Comment appliquer un rendu d'affichage basé sur les rôles ou sur l'authentification?

<RequiresRole(Role:="Admin")> _ 
Function Action() as ActionResult 
    Return View() 
End Function 

Y at-il une façon similaire (attribution) que je peux utiliser dans les vues? (Donc pas comme ça: How can I create a view that has different displays according to the role the user is in?)

+1

Pourquoi avez-vous dû créer un ActionFilterATtribute pour cela? L'attribut Authorize prend un paramètre Roles. –

+0

Oh right :-) J'ai créé le mien juste pour apprendre – Ropstah

Répondre

6

Vous pouvez accéder à des rôles dans journalisée de l'utilisateur de la vue comme ceci:

<% if (Page.User.IsInRole("Admin")) { %> 
     <td> 
      <%= Html.DeleteButton("delete", model.ID) %> 
     </td> 
<% } %> 

et peut-être votre méthode d'extension avec quelque chose comme:

public static string DeleteButton(this HtmlHelper html, 
    string linkText, int id) 
{ 
    return html.RouteLink(linkText, 
    new { ID = id, action = "Delete" }, 
    new { onclick = "$.delete(this.href, deleteCompleted()); return false;" }); 
} 

De toute évidence, j'utilise JavaScript pour effectuer un DELETE HTTP à mon action de contrôleur, pour empêcher les robots d'exploration de page de supprimer accidentellement des données d'obtenir mes pages. Dans mon cas j'étend JQuery avec une méthode delete() pour compléter le verbe HTTP.

+0

Ok, donc l'utilisation du rendu basé sur l'attribut n'est probablement pas possible. Je devrais aller avec les instructions If ... Thx – Ropstah

0

Je nouveau cela existé, mais a mis du temps à trouver. Voici ce que je me sers:

<asp:LoginView runat="server"> 
    <AnonymousTemplate> 
     You are not logged in yet. Please log in. 
    </AnonymousTemplate> 
    <RoleGroups> 
     <asp:RoleGroup Roles="Admin"> 
      <ContentTemplate> 
       You are an Admin. 
      </ContentTemplate> 
     </asp:RoleGroup> 
     <asp:RoleGroup Roles="Customers"> 
      <ContentTemplate> 
       You are a customer. 
      </ContentTemplate> 
     </asp:RoleGroup> 
    </RoleGroups> 
    <LoggedInTemplate> 
     Simple Log in check 
    </LoggedInTemplate> 
</asp:LoginView> 

Cela vous permet d'afficher un contenu différent aux différents utilisateurs en fonction de leur état de connexion ou les informations d'identification.

+0

Ceci est WebForms. Je crois que le message original était sur MVC. –

Questions connexes