tutorial net mvc example asp asp.net asp.net-identity asp.net-roles

mvc - Agregar usuario a la identidad de rol de ASP.NET



mvc roles authorization (6)

A continuación se muestra una implementación alternativa de un método de controlador ''crear usuario'' utilizando roles basados ​​en notificaciones.

Los reclamos creados luego funcionan con el atributo Autorizar, por ejemplo, [Autorizar (Roles = "Admin, Usuario. *, Usuario.Crear")]

// POST api/User/Create [Route("Create")] public async Task<IHttpActionResult> Create([FromBody]CreateUserModel model) { if (!ModelState.IsValid) { return BadRequest(ModelState); } // Generate long password for the user var password = System.Web.Security.Membership.GeneratePassword(25, 5); // Create the user var user = new ApiUser() { UserName = model.UserName }; var result = await UserManager.CreateAsync(user, password); if (!result.Succeeded) { return GetErrorResult(result); } // Add roles (permissions) for the user foreach (var perm in model.Permissions) { await UserManager.AddClaimAsync(user.Id, new Claim(ClaimTypes.Role, perm)); } return Ok<object>(new { UserName = user.UserName, Password = password }); }

Sé que la nueva membresía incluye un "proveedor de funciones simples".

No puedo encontrar ninguna ayuda relacionada con la creación de un usuario y la asignación de un rol cuando se crea el usuario. He añadido un usuario que creó las tablas en la base de datos correctamente. Veo las AspNetRoles , AspNetUserRoles y AspNetUsers .

Deseo asignar un rol de AspNetRoles a un usuario en AspNetUsers cuyo ID de rol / usuario se almacenará en AspNetUserRoles.

Estoy atascado en la parte de programación de dónde y cómo hacerlo cuando creo el usuario.

Tengo una lista desplegable para seleccionar el rol, pero al usar Entity CF junto con el nuevo modelo de identidad de ASP.NET, no estoy seguro de cómo tomar el ID del valor seleccionado del desplegable y el UserID y asignar el rol.


Compruebe este enlace: Asignación de roles a los usuarios . Puede agregar un paso a su control CreateUserWIzard y elegir los roles en ese paso.

<asp:CreateUserWizard ID="RegisterUserWithRoles" runat="server" ContinueDestinationPageUrl="~/Default.aspx" LoginCreatedUser="False" onactivestepchanged="RegisterUserWithRoles_ActiveStepChanged"> <WizardSteps> <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server"> </asp:CreateUserWizardStep> <asp:WizardStep ID="SpecifyRolesStep" runat="server" AllowReturn="False" StepType="Step" Title="Specify Roles"> <h3>Choose the role.</h3> <asp:CheckBoxList ID="RoleList" runat="server"> </asp:CheckBoxList> </asp:WizardStep> <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server"> </asp:CompleteWizardStep> </WizardSteps> </asp:CreateUserWizard>

Y en el código subyacente tendrás:

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { // Reference the SpecifyRolesStep WizardStep WizardStep SpecifyRolesStep = RegisterUserWithRoles.FindControl("SpecifyRolesStep") as WizardStep; // Reference the RoleList CheckBoxList CheckBoxList RoleList = SpecifyRolesStep.FindControl("RoleList") as CheckBoxList; // Bind the set of roles to RoleList RoleList.DataSource = Roles.GetAllRoles(); RoleList.DataBind(); } } protected void RegisterUserWithRoles_ActiveStepChanged(object sender, EventArgs e) { // Have we JUST reached the Complete step? if (RegisterUserWithRoles.ActiveStep.Title == "Complete") { // Reference the SpecifyRolesStep WizardStep WizardStep SpecifyRolesStep = RegisterUserWithRoles.FindControl("SpecifyRolesStep") as WizardStep; // Reference the RoleList CheckBoxList CheckBoxList RoleList = SpecifyRolesStep.FindControl("RoleList") as CheckBoxList; // Add the checked roles to the just-added user foreach (ListItem li in RoleList.Items) { if (li.Selected) Roles.AddUserToRole(RegisterUserWithRoles.UserName, li.Text); } } }


Encontré una buena respuesta aquí Agregando roles dinámicamente en el nuevo Identity UserManager de VS 2013

Pero en el caso de proporcionar un ejemplo para que lo pueda comprobar, compartiré un código predeterminado.

Primero asegúrese de que tiene roles insertados.

Y la segunda prueba en método de registro de usuario.

[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser() { UserName = model.UserName }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { var currentUser = UserManager.FindByName(user.UserName); var roleresult = UserManager.AddToRole(currentUser.Id, "Superusers"); await SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }

Y, finalmente, tienes que obtener "Superusuarios" de la Lista desplegable de roles de alguna manera.


Estás buscando algo así:

RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new MyDbContext())); var str = RoleManager.Create(new IdentityRole(roleName));

También verifique la identidad del usuario


Si bien estoy de acuerdo con las otras respuestas con respecto al RoleManager, aconsejaría examinar la posibilidad de implementar la Autorización a través de las Reclamaciones ( Expresar los Roles como Reclamaciones ).

A partir de .NET Framework 4.5, Windows Identity Foundation (WIF) se ha integrado completamente en .NET Framework.

En las aplicaciones para notificaciones, el rol se expresa mediante un tipo de reclamación de rol que debe estar disponible en el token. Cuando se llama al método IsInRole (), se realiza una comprobación para ver si el usuario actual tiene ese rol.

El tipo de reclamación de rol se expresa mediante el siguiente URI: " http://schemas.microsoft.com/ws/2008/06/identity/claims/role "

Entonces, en lugar de usar RoleManager , puedes "agregar un usuario a un rol" desde UserManager , haciendo algo como esto:

var um = new UserManager(); um.AddClaimAsync(1, new Claim("http://schemas.microsoft.com/ws/2008/06/identity/claims/role", "administrator"));

Con las líneas anteriores, ha agregado una reclamación de rol con el valor "administrador" al usuario con el ID "1" ...

La autorización de reclamaciones, según lo sugiere MSFT, puede simplificar y aumentar el rendimiento de los procesos de autenticación y autorización, eliminando algunas consultas de back-end cada vez que se lleva a cabo la autorización.

Usando Reclamaciones puede que ya no necesite el RoleStore. (AspNetRoles, AspNetUserRoles)


Tuve el mismo reto. Esta es la solución que encontré para agregar usuarios a los roles.

internal class Security { ApplicationDbContext context = new ApplicationDbContext(); internal void AddUserToRole(string userName, string roleName) { var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); try { var user = UserManager.FindByName(userName); UserManager.AddToRole(user.Id, roleName); context.SaveChanges(); } catch { throw; } } }