[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" });
}
}
}
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
Sugeriría tal vez la siguiente línea para comprobar si el usuario contiene un rol ... if (! Roles.IsUserInRole ("john", "Admin")) –