2009-04-29 5 views
6

Voglio mostrare/nascondere alcune parti di una vista in base allo stato dell'autenticazione o ai ruoli. Per le azioni del mio controller ho esteso ActionFilterAttribute in modo da poter attribuire determinate azioni.ASP.NET MVC Come applicare il rendering vista basata su ruoli o autenticazione?

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

Esiste un simile modo (attribuendo), che posso usare le viste? (Quindi non in questo modo: How can I create a view that has different displays according to the role the user is in?)

+1

Perché hai dovuto creare un ActionFilterATtribute per quello? L'attributo Authorize accetta un parametro Roles. –

+0

Oh, giusto :-) Ho creato il mio solo per imparare – Ropstah

risposta

6

È possibile accedere l'utente del loggato ruoli dal punto di vista del genere:

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

e forse il tuo metodo di estensione con qualcosa di simile:

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;" }); 
} 

Ovviamente, sto usando JavaScript per eseguire un DELETE HTTP sull'azione del mio controller, per impedire ai crawler di eliminare accidentalmente i dati dalle mie pagine. Nel mio caso sto estendendo JQuery con un metodo delete() per integrare il verbo HTTP.

+0

Ok, quindi il rendering della vista basato sugli attributi non è probabilmente possibile. Dovrei andare con le istruzioni If ... Thx – Ropstah

0

Sono nuovo, ma ho impiegato un po 'di tempo per trovarlo. Ecco quello che sto usando:

<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> 

Questo consente di visualizzare contenuti diversi a diversi utenti in base al loro stato di accesso o credenziali.

+0

Questo è WebForms. Credo che il post originale riguardasse MVC. –