asp.net web api - permisos - Cómo crear roles y agregar usuarios a los roles en ASP.NET MVC Web API
roles y permisos mvc 5 (2)
Me tomó un tiempo entenderlo pero finalmente lo conseguí. Anthony, por favor, discúlpeme, pero voy a volver a publicar gran parte de su código para que los desarrolladores tontos como yo puedan entenderlo.
En el último WebAPI2 (Actualización de Visual Studio 2013 2), el método de registro se verá así:
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
Lo que quieres hacer es reemplazarlo con esto:
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
IdentityResult result;
using (var context = new ApplicationDbContext())
{
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
await roleManager.CreateAsync(new IdentityRole() { Name = "Admin" });
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
result = await UserManager.CreateAsync(user, model.Password);
await userManager.AddToRoleAsync(user.Id, "Admin");
}
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
Ahora, cuando lo publiques debería funcionar correctamente, pero es posible que encuentres un problema adicional. Después de hacer esto, mi respuesta se quejó de la DB.
The model backing the <Database> context has changed since the database was created
Para corregir este error, tuve que ingresar a la Consola del Administrador de Paquetes y habilitar las Migraciones.
Enable-Migrations –EnableAutomaticMigrations
Entonces:
Add Migration
Finalmente:
Update-Database
Una buena publicación sobre cómo habilitar las migraciones aquí: http://msdn.microsoft.com/en-us/data/jj554735.aspx
Tengo un proyecto de API web .NET que utiliza las cuentas individuales. Puedo registrar bien a los usuarios utilizando la plantilla estándar AccountController. Sin embargo, ahora quiero configurar roles y agregar usuarios a roles dependiendo del tipo de usuario.
No hay roles configurados automáticamente en la base de datos. ¿Cómo configuro los roles y cómo agrego usuarios a los roles?
La única información que puedo encontrar sobre esto se basa en la antigua membresía de ASP.NET, por lo que falla en el hecho de que los procedimientos almacenados no están configurados para ello.
Ha explorado foros y tutoriales en MSDN y parece que no puede encontrar un ejemplo para la API web.
Puedes agregar roles usando el RoleManager ...
using (var context = new ApplicationDbContext())
{
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
await roleManager.CreateAsync(new IdentityRole { Name = "Administrator" });
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
var user = new ApplicationUser { UserName = "admin" };
await userManager.CreateAsync(user);
await userManager.AddToRoleAsync(user.Id, "Administrator");
}
Tienes razón en que la documentación es un poco ligera en este momento. Pero me parece que una vez que ha trabajado un poco con RoleManager y UserManager, las API son bastante visibles (pero quizás no siempre intuitivas y, a veces, tiene que ejecutar consultas directamente en la tienda o incluso en el contexto de db).