2009-04-29 12 views
6

Quiero mostrar u ocultar ciertas partes de una Vista en función del estado de Autenticación o Roles. Para mis acciones de controlador, he extendido ActionFilterAttribute para que pueda atribuir ciertas acciones.ASP.NET MVC ¿Cómo aplicar la representación de Vista basada en roles o en autenticación?

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

¿Existe un similares manera (atribución), que puedo usar en las Vistas? (Por lo que no es como esto: How can I create a view that has different displays according to the role the user is in?)

+1

¿Por qué tuvo que crear un ActionFilterATtribute para eso? El atributo Autorizar toma un parámetro Roles. –

+0

Oh, cierto :-) Creé el mío solo para aprender – Ropstah

Respuesta

6

Se puede acceder al usuario de que ha iniciado sesión en papeles de la vista de la siguiente manera:

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

y tal vez su método de extensión con algo como:

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

Obviamente, estoy usando JavaScript para realizar un HTTP DELETE a mi acción de controlador, para evitar que los rastreadores de página eliminen accidentalmente los datos de mis páginas. En mi caso extiendo JQuery con un método delete() para complementar el verbo HTTP.

+0

Ok, así que probablemente no sea posible usar la representación de vistas basada en atributos. Debo ir con declaraciones If ... Thx – Ropstah

0

I nuevo esto existió, pero tomó un tiempo para encontrarlo. Esto es lo que estoy 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> 

Esto le permite mostrar contenidos diferentes a diferentes usuarios en función de su estado de inicio de sesión o credenciales.

+0

Esto es WebForms. Creo que la publicación original era sobre MVC. –

Cuestiones relacionadas