2012-10-03 9 views
7

He creado la aplicación asp.net mvc4 usando el motor razor, soy nuevo en esta tecnología y trato de encontrar una manera de mostrar una lista de usuarios registrados a el administrador después del administrador inicia sesión. La membresía usa system.web.providers. ¿Alguien puede decir en primer lugar cómo crear roles separados para los usuarios, admin utilizando el marco de la entidad en segundo lugar cómo obtener y mostrar la lista de todos los usuarios registrados con diferentes roles para el administrador.cómo mostrar la lista de usuarios registrados a admin en la aplicación asp.net mvc4

Gracias de antemano. Saludos

Respuesta

15
[Authorize(Roles = "Admin")] 
public ActionResult Index() 
{ 
    using (var ctx = new UsersContext()) 
    { 
     return View(ctx.UserProfiles.ToList()); 
    } 
} 

y en la vista:

@using MvcApplication1.Models 
@model IEnumerable<UserProfile> 
@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
</head> 
<body> 
    <h2>Users list</h2> 
    <table> 
     <thead> 
      <tr> 
       <th>id</th> 
       <th>name</th> 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (var user in Model) 
      { 
       <tr> 
        <td>@user.UserId</td> 
        <td>@user.UserName</td> 
       </tr> 
      } 
     </tbody> 
    </table> 
</body> 
</html> 

Por supuesto, con el fin de poder acceder a la acción /users/index controlador es necesario tener primero de usuarios y roles. Solo un usuario en el rol de administrador podrá invocarlo.

Aquí hay un tutorial que explica cómo puede usar las migraciones para sembrar su base de datos con algunas cuentas.

Así es como una configuración de migración de ejemplo podría ser:

internal sealed class Configuration : DbMigrationsConfiguration<UsersContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(UsersContext context) 
    { 
     WebSecurity.InitializeDatabaseConnection(
      "DefaultConnection", 
      "UserProfile", 
      "UserId", 
      "UserName", 
      autoCreateTables: true 
     ); 

     if (!Roles.RoleExists("Admin")) 
     { 
      Roles.CreateRole("Admin"); 
     } 

     if (!WebSecurity.UserExists("john")) 
     { 
      WebSecurity.CreateUserAndAccount("john", "secret"); 
     } 

     if (!Roles.GetRolesForUser("john").Contains("Admin")) 
     { 
      Roles.AddUsersToRoles(new[] { "john" }, new[] { "Admin" }); 
     } 
    } 
} 
+0

he tenido que añadir @Model IEnumerable en mi opinión, para conseguir que esto funcione con el estándar (modelo => modelo .Username). +1 porque esto me puso en el camino correcto. No estoy seguro de cuál es la diferencia. Yo pensaría que si encuentra UserProfile no necesitaría el modelo completo y además tiene la instrucción using. – Xaxum

+0

Sugeriría tal vez la siguiente línea para comprobar si el usuario contiene un rol ... if (! Roles.IsUserInRole ("john", "Admin")) –

Cuestiones relacionadas