ASP.NET MVC Come applicare il rendering della vista basato sui ruoli o basato sull'autenticazione?

StackOverflow https://stackoverflow.com/questions/802073

Domanda

Voglio mostrare / nascondere alcune parti di una vista in base allo stato di autenticazione o ai ruoli. Per le azioni del mio controller ho esteso ActionFilterAttribute in modo da poter attribuire determinate azioni.

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

Esiste un modo simile (attributo) che posso usare nelle viste? (quindi non così: Come posso creare una vista con schermi diversi in base al ruolo in cui si trova l'utente? )

È stato utile?

Soluzione

Puoi accedere ai ruoli di accesso dell'utente dalla vista in questo modo:

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

e forse il tuo metodo di estensione con qualcosa del tipo:

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 una CANCELLAZIONE HTTP all'azione del mio controller, per evitare che i crawler delle pagine cancellino accidentalmente i dati per ottenere le mie pagine. Nel mio caso sto estendendo JQuery con un metodo delete () per integrare il verbo HTTP.

Altri suggerimenti

Ho pensato che questo esistesse, ma ci è voluto un po 'per trovarlo. Ecco cosa 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>

Ciò ti consente di mostrare contenuti diversi a utenti diversi in base al loro stato di accesso o credenziali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top