asp.net mvc - net - Cómo usar Roles en la identidad del usuario en MVC 5
filtro de busqueda mvc (1)
Cuando escribes
!Roles.RoleExists("Member")
¡no estás usando ASP.NET Identity! en su lugar, debe usar ApplicationRole
para extender la clase IdentityRole
Además, no necesita decirle AspNetSqlRoleProvider
en su archivo de configuración. Asp.Net Identity es algo diferente. En Asp.Net Identity hay una clase llamada ApplicationRoleManager
en la carpeta App_Start.
No debe usar Asp.Net Identity como si fuera la membresía simple anterior.
Alternativamente, consulte la versión beta (lo que significa que las cosas pueden cambiar) de Identity para obtener más información sobre cómo hacerlo en Identity.
Aquí es cómo comenzar:
- Crear un nuevo proyecto: elegir plantilla vacía (no MVC, no formulario web)
Instale la muestra de identidad de Asp.Net a través de nuget
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre
- edite el espacio de nombres para que coincida con el espacio de nombres de su proyecto anterior
- Si desea copiar algunas carpetas de su proyecto anterior al nuevo proyecto, copie su (Controladores, Vistas, ...) no los archivos de configuración.
Aquí puedes crear roles de la siguiente manera:
var role = new IdentityRole("roleName");
var roleresult = await RoleManager.CreateAsync(role);
y para crear y agregar un usuario a roles específicos, usará esto
var user = new ApplicationUser
{
UserName = "tresorunikin",
Email = "[email protected]",
EmailConfirmed =true
};
var userResult = await UserManager.CreateAsync(user, "[email protected]");
if(userResult.Succeeded){
string[] roles =new string[]{"admin","seller","other"};
var roleResult = await UserManager.AddToRolesAsync(user.Id, roles);
if(roleResult.Succeeded){
//Here, user has been added to roles
}
}
Todo esto lo hace Pranav Rastogi
, uno de los Pranav Rastogi
del equipo de identidad de Microsoft.
Tenga en cuenta que con estas muestras tiene como objetivo una nueva versión (beta) de System.Web.Mvc que es más reciente que System.Web.Mvc 5.0.0.0. Si recuerdo bien, la versión beta es System.Web.MVC 5.0.1.2 o algo así como ese
Para obtener más información acerca de la identidad, haga clic aquí
ACTUALIZACIONES La versión en las muestras es: System.Web.Mvc 5.2.1.0
Quiero usar asp.net useridentity en mvc 5, realizo estos pasos:
1) crea un proyecto mvc.
2) crear mi propia base de datos y cambiar la conexión en el formulario web.config: a:
3) Ejecuto el proyecto y creo un nuevo usuario para agregar una tabla relacionada a mi base de datos.
4) Quería agregar un rol a un usuario después de registrar un usuario como este código en accountControler:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
//******************* Add Role To User **************
if (!Roles.RoleExists("Member"))
Roles.CreateRole("Member");
Roles.AddUserToRole(model.Email, "Member");
//****************************************************
await SignInAsync(user, isPersistent: false);
// For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link
// string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
// var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
// await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=/"" + callbackUrl + "/">here</a>");
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
5) Agrego
<roleManager enabled="true">
dentro:
<system.web></system.web>
cuando creo un nuevo usuario, mi usuario se registra bien pero el usuario no agrega a la función, y cuando lo hago VS Crea una nueva base de datos en App_Data con el nombre "ASPNETDB.MDF". así que encontré un nuevo artículo que explica la configuración del proveedor de funciones en web.config y:
6) Agrego
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
dentro :
<system.web></system.web>
pero cuando quiero registrar un nuevo usuario, encuentro este error:
No se pudo encontrar el procedimiento almacenado ''dbo.aspnet_CheckSchemaVersion''.
Ahora creo que mi problema es que cuando realice el paso 3, ¡no creará completamente la base de datos de identidad del usuario y el procedimiento almacenado! ¿Estoy usando role true para MVC 5? ¡Por favor ayúdame a resolver este problema!