Création de rôles dans Asp.net Identity MVC 5

Il existe très peu de documentation sur l’utilisation du nouveau framework de sécurité Asp.net Identity.

J’ai reconstitué ce que je pouvais pour créer un nouveau rôle et y append un utilisateur. J’ai essayé ce qui suit: Ajouter un rôle dans ASP.NET Identity

qui semble avoir obtenu les informations de ce blog: créer une application simple à faire avec l’identité asp.net et associer les utilisateurs aux tâches à faire

J’ai ajouté le code à un initialiseur de firebase database qui est exécuté chaque fois que le modèle change. Il échoue sur la fonction RoleExists avec l’erreur suivante:

System.InvalidOperationException s’est produite dans mscorlib.dll Le type d’entité IdentityRole ne fait pas partie du modèle pour le contexte actuel.

 protected override void Seed (MyContext context) { var UserManager = new UserManager(new UserStore(context)); var RoleManager = new RoleManager(new RoleStore(context)); // Create Admin Role ssortingng roleName = "Admins"; IdentityResult roleResult; // Check to see if Role Exists, if not create it if (!RoleManager.RoleExists(roleName)) { roleResult = RoleManager.Create(new IdentityRole(roleName)); } } 

Toute aide est appréciée.

Vérifiez que vous avez la signature suivante de votre classe MyContext

public class MyContext : IdentityDbContext

Ou

public class MyContext : IdentityDbContext

Le code fonctionne pour moi, sans aucune modification !!!

Et c’est parti:

 var roleManager = new RoleManager(new RoleStore(new ApplicationDbContext())); if(!roleManager.RoleExists("ROLE NAME")) { var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole(); role.Name = "ROLE NAME"; roleManager.Create(role); } 

Voici l’article complet décrivant comment créer un rôle, modifier des rôles, supprimer des rôles et gérer des rôles à l’aide de ASP.NET Identity. Cela contient également l’interface utilisateur, les méthodes du contrôleur, etc.

http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc

J’espère que cette aide

Merci

En ASP.NET 5 rc1-final , j’ai suivi:

ApplicationRoleManager créé (de manière similaire à ApplicationUser créé par un modèle)

 public class ApplicationRoleManager : RoleManager { public ApplicationRoleManager( IRoleStore store, IEnumerable> roleValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, ILogger> logger, IHttpContextAccessor contextAccessor) : base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor) { } } 

Pour ConfigureServices dans Startup.cs , je l’ai ajouté en tant que RoleManager

 services. .AddIdentity() .AddRoleManager(); 

Pour créer de nouveaux rôles, appelez depuis Configure :

 public static class RoleHelper { private static async Task EnsureRoleCreated(RoleManager roleManager, ssortingng roleName) { if (!await roleManager.RoleExistsAsync(roleName)) { await roleManager.CreateAsync(new IdentityRole(roleName)); } } public static async Task EnsureRolesCreated(this RoleManager roleManager) { // add all roles, that should be in database, here await EnsureRoleCreated(roleManager, "Developer"); } } public async void Configure(..., RoleManager roleManager, ...) { ... await roleManager.EnsureRolesCreated(); ... } 

Maintenant, les règles peuvent être assignées à l’utilisateur

 await _userManager.AddToRoleAsync(await _userManager.FindByIdAsync(User.GetUserId()), "Developer"); 

Ou utilisé dans l’atsortingbut Authorize

 [Authorize(Roles = "Developer")] public class DeveloperController : Controller { } 

Pour améliorer le code Peters ci-dessus, vous pouvez utiliser ceci:

  var roleManager = new RoleManager(new RoleStore(new ApplicationDbContext())); if (!roleManager.RoleExists("Member")) roleManager.Create(new IdentityRole("Member")); 

Mon application était suspendue au démarrage lorsque j’ai utilisé les exemples de code de Peter Stulinski & Dave Gordon avec EF 6.0. J’ai changé:

 var roleManager = new RoleManager(new RoleStore(new ApplicationDbContext())); 

à

 var roleManager = new RoleManager(new RoleStore(**context**)); 

Ce qui est logique lorsque, dans la méthode d’amorçage, vous ne voulez pas instancier une autre instance de ApplicationDBContext . Cela a peut-être été aggravé par le fait que j’ai eu Database.SetInitializer(new ApplicationDbInitializer()); dans le constructeur d’ ApplicationDbContext

Roles View Model

 public class RoleViewModel { public ssortingng Id { get; set; } [Required(AllowEmptySsortingngs = false)] [Display(Name = "RoleName")] public ssortingng Name { get; set; } } 

Méthode du contrôleur

  [HttpPost] public async Task Create(RoleViewModel roleViewModel) { if (ModelState.IsValid) { var role = new IdentityRole(roleViewModel.Name); var roleresult = await RoleManager.CreateAsync(role); if (!roleresult.Succeeded) { ModelState.AddModelError("", roleresult.Errors.First()); return View(); } return RedirectToAction("some_action"); } return View(); } 

Je voulais partager une autre solution pour append des rôles:

 

Create Role

@using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) Role name:

@Html.TextBox("RoleName", null, new { @class = "form-control input-lg" })

}

Manette:

  [HttpGet] public ActionResult AdminView() { return View(); } [HttpPost] public ActionResult AdminView(FormCollection collection) { var roleManager = new RoleManager(new RoleStore(new ApplicationDbContext())); if (roleManager.RoleExists(collection["RoleName"]) == false) { Guid guid = Guid.NewGuid(); roleManager.Create(new IdentityRole() { Id = guid.ToSsortingng(), Name = collection["RoleName"] }); } return View(); } 
  public static void createUserRole(ssortingng roleName) { if (!System.Web.Security.Roles.RoleExists(roleName)) { System.Web.Security.Roles.CreateRole(roleName); } } 

La méthode que j’utilise pour créer des rôles est ci-dessous. Leur atsortingbution aux utilisateurs dans le code est également répertoriée. le code ci-dessous se trouve dans “configuration.cs” dans le dossier migrations.

 ssortingng [] roleNames = { "role1", "role2", "role3" }; var RoleManager = new RoleManager(new RoleStore(context)); IdentityResult roleResult; foreach(var roleName in roleNames) { if(!RoleManager.RoleExists(roleName)) { roleResult = RoleManager.Create(new IdentityRole(roleName)); } } var UserManager = new UserManager(new UserStore(context)); UserManager.AddToRole("user", "role1"); UserManager.AddToRole("user", "role2"); context.SaveChanges();