Cómo agregar roles de usuario simples-Asp.net MVC C#
asp.net-mvc (1)
El primer paso es crear el rol de admin
. Esto es bastante fácil:
context.Roles.Add(new IdentityRole { Name = "admin" });
context.SaveChanges();
Para agregar el rol a un usuario existente:
var role = context.Roles.SingleOrDefault(m => m.Name == "admin");
user.Roles.Add(new IdentityUserRole { RoleId = role.Id });
Ambos y estos pasos pueden y deben manejarse en el método Seed
de Migrations/Configuration.cs
, junto con la creación de cualquier usuario inicial que deba ser administrador.
Para la capacidad de los administradores de agregar roles a otros usuarios, ya tiene cubierto el primer paso: proteger la acción con [Authorize(Roles = "admin")]
.
A continuación, necesitará un modelo de vista para trabajar con su usuario. Algo como lo siguiente:
public class UserViewModel
{
// user properties you''d like to edit here
public List<int> SelectedRoleIds { get; set; }
public IEnumerable<SelectListItem> RoleChoices { get; set; }
}
Deberá asignar su ApplicationUser
a / desde este modelo de vista. Luego, deberá rellenar manualmente las dos propiedades de rol en UserViewModel
:
RoleChoices
debe ser un enumerable de todos los roles disponibles:
model.RoleChoices = context.Roles.Select(m => new SelectListItem
{
Value = m.Id,
Text = m.Name
});
SelectedRoleIds
debe ser una lista de los identificadores de todos los roles asignados actualmente al usuario:
model.SelectedRoleIds = user.Roles.Select(m => m.RoleId);
En su opinión, entonces, construirá su multiselect:
@Html.ListBoxFor(m => m.SelectedRoleIds, Model.RoleChoices)
Al crear un nuevo usuario, simplemente puede establecer las funciones del usuario directamente en la publicación:
user.Roles = model.SelectedRoleIds.Select(m => new IdentityUserRole { RoleId = m });
Al editar un usuario existente, se debe tener más cuidado, ya que obtendrá errores de integridad si guarda el mismo id de rol dos veces para el mismo usuario. Primero, deberá eliminar cualquier rol que haya sido deseleccionado:
user.Roles.Where(m => !model.SelectedRoleIds.Contains(m.RoleId))
.ToList().ForEach(role => user.Roles.Remove(role));
Luego, deberás agregar cualquier nuevo rol seleccionado:
var existingUserRoles = user.Roles.Select(m => m.RoleId);
model.SelectedRoleIds.Except(existingUserRoles)
.ToList().ForEach(roleId => user.Roles.Add(new IdentityUserRole
{
RoleId = roleId
}));
Soy bastante nuevo en asp.net mvc y he estado buscando muchas maneras diferentes de agregar roles de usuario para mi sitio asp mvc. Quiero usar la (s) base (s) de datos de usuarios que se crean automáticamente para usted cuando realiza un nuevo proyecto mvc. Que contienen las tablas:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
He estado viendo algunos tutoriales y creo que es un campo mental para principiantes.
Todo lo que quiero poder hacer es algo como esto.
[Authorize(Roles = "admin")]
public ActionResult Index()
{
Return View();
}
Así que los usuarios con el rol de administrador pueden acceder a la página de índice. Toda la ayuda solicitada.