ASP.NET Identité fondamentale Ajouter des rôles d'utilisateur au démarrage de l'application
Dans un ASP.NET application de Base, je veux créer un certain nombre de rôles en tant que base pour gérer les différents utilisateurs des autorisations. Malheureusement, la documentation informer détaillée comment utiliser des rôles personnalisés, par exemple dans les contrôleurs/actions, mais pas comment les créer. J'ai découvert que je peux utiliser RoleManager<IdentityRole>
pour cela, où l'instance est automatiquement injecté dans un contrôleur-constructeur, lors de sa définis et ASP.NET de Base de l'identité est enregistrée dans l'application.
Ce permettez-moi d'ajouter un rôle personnalisé comme ceci:
var testRole = new IdentityRole("TestRole");
if(!roleManager.RoleExistsAsync(testRole.Name).Result) {
roleManager.CreateAsync(testRole);
}
Il fonctionne et créer le rôle dans la base de données. Mais cette vérification sera toujours de créer de surcharge sur la base de données, l'appel de la contrôleur/action. Je tiens donc à vérifier une fois après ma demande a commencé, si la coutume rôle existe et les ajouter. Le ConfigureServices
méthode de Démarrage.cs semble bon pour cela.
Mais: Comment puis-je créer une instance de la RoleManager<IdentityRole>
classe pour faire cela? Je voudrais utiliser une approche des meilleures pratiques ici et de ne pas déconner par la création d'selon les cas sur le mien, qui semble causer beaucoup de travail car il n'est pas bon pour rédaction et ne manquera pas de suivre les meilleures pratiques, puisqu'ASP.NET de Base est d'utiliser l'injection de dépendance pour des choses comme ceci (qui est également raisonnable dans mon oppinion).
En d'autres termes: j'ai besoin d'utiliser dependeny injection à l'extérieur d'un contrôleur.
- vous pourriez être intéressé à mon projet qui permet la gestion de l'Identité des utilisateurs, des rôles, et des revendications de la github.com/joeaudette/cloudscribe
Vous devez vous connecter pour publier un commentaire.
Voici un exemple pour vos besoins qui migre et les graines de la base de données au démarrage:
Créer une classe statique:
Et dans
Startup.cs
:if (await db.Database.EnsureCreatedAsync())
condition estfalse
donc pas les rôles sont créés.if (dbContext.Database.GetPendingMigrations().Any())
etawait dbContext.Database.MigrateAsync();
if (dbContext.Database.GetPendingMigrations().Any()) await dbContext.Database.MigrateAsync();
dbContext.Database.GetPendingMigrations().Any()
je suis un'DatabaseFacade' does not contain a definition for 'GetPendingMigrations'
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
RoleManager
du mal portée. J'ai mis à jour la réponse pour résoudre ce problème.Je préfère de graines de données uniquement si il n'y a pas des rôles déjà inséré dans la base de données. En d'autres mots stocker les rôles uniquement lorsque l'application est en cours d'exécution pour la première fois:
Et au Démarrage.cs: