users tutorial net mvc manage identityrole custom asp and c# asp.net asp.net-identity

c# - tutorial - mvc roles authorization



Inicializando RoleManager en la identidad de ASP.NET con roles personalizados (3)

De su pregunta no puedo determinar si está utilizando los mismos marcos (MVC y EF).

Recientemente, he creado una solución MVC + EF utilizando ApplicationUsers e IdentityRoles personalizados. ApplicationUser se deriva de "Microsoft.AspNet.Identity.EntityFramework.IdentityUser". ApplicationRoles se implementan sin cambios.

Tengo la siguiente clase:

// Configure the used in the application. RoleManager is defined in the ASP.NET Identity core assembly public class ApplicationRoleManager : RoleManager<IdentityRole> { public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore) : base(roleStore) { } public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context) { return new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>())); } }

dentro de configuration.cs (migrations) ==> en ''update-database'' esto se ejecutará

var roleStore = new RoleStore<IdentityRole>(context); var roleManager = new RoleManager<IdentityRole>(roleStore); var applicationRoleAdministrator = new IdentityRole("Administrator"); if (!roleManager.RoleExists(applicationRoleAdministrator.Name)) { roleManager.Create(applicationRoleAdministrator); } // do some logic to find your applicationUserAdministrator var applicationUserAdministrator = userManager.FindByName("Administrator"); userManager.AddToRole(applicationUserAdministrator.Id, applicationRoleAdministrator.Name);

Dentro de startup.auth.cs el enlace hacia el RoleManager:

app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

Cambié la clave principal de la base de datos de usuario de cadena a int usando el tutorial here , pero tengo dificultades para inicializar el Administrador de roles. Solía ​​ser inicializado usando

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

¿Cómo puedo crear el administrador de roles utilizando los nuevos datos?

Actualización: estoy usando MVC 5 y EF 6.


Espero que esto ayude.

var roleManager = new RoleManager<CustomRole,int>(new RoleStore<CustomRole,int,CustomUserRole>(context)); var UserManager = new UserManager<ApplicationUser,int>(new UserStore<ApplicationUser,CustomRole,int,CustomUserLogin,CustomUserRole,CustomUserClaim>(context)); // In Startup iam creating first Admin Role and creating a default Admin User if (!roleManager.RoleExists("Admin")){ //first we create Admin rool var role = new CustomRole(); role.Name = "Admin"; roleManager.Create(role); } ////Here we create a Admin super user who will maintain the website if (UserManager.FindByName("Admin") == null){ var user = new ApplicationUser() { UserName = "Admin" }; string userPWD = "adminadmin"; var chkUser = UserManager.Create(user, userPWD); if (chkUser.Succeeded){ var result1 = UserManager.AddToRole(user.Id, "Admin") ; } }


Su ApplicationRoleManager puede tener este aspecto. porque tienes que heredar de tu clase customRole en lugar de IdentityRole .

public class ApplicationRoleManager : RoleManager<CustomRole, int> { public ApplicationRoleManager(IRoleStore<CustomRole, int> roleStore) : base(roleStore) { } public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context) { return new ApplicationRoleManager(new RoleStore<CustomRole, int, CustomUserRole>(context.Get<ApplicationDbContext>())); } }

Luego agregue el siguiente código a la clase Startup.Auth.cs si no existe actualmente.

app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

Entonces creas y administras roles.

var roleManager = HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); const string roleName = "Admin"; //Create Role Admin if it does not exist var role = roleManager.FindByName(roleName); if (role == null) { role = new CustomRole(); role.Id = 1; // this will be integer role.Name = roleName; var roleresult = roleManager.Create(role); }

Espero que esto ayude.