In einer ASP.NET Core-Anwendung möchte ich bestimmte Rollen als Grundlage für die Verwaltung verschiedener Benutzerberechtigungen erstellen. Leider enthält die Dokumentation detaillierte Informationen zur Verwendung von benutzerdefinierten Rollen, z. in Controllern/Aktionen, aber nicht wie man sie erstellt. Ich fand heraus, dass ich dafür RoleManager<IdentityRole>
verwenden kann, wo die Instanz automatisch in einen Controller-Konstruktor injiziert wird, wenn ihre definierte und ASP.NET Core-Identität in der Anwendung registriert ist.ASP.NET Core Identity Hinzufügen von benutzerdefinierten Benutzerrollen beim Start der Anwendung
Diese lassen Sie mich eine benutzerdefinierte Rolle wie folgt hinzu:
var testRole = new IdentityRole("TestRole");
if(!roleManager.RoleExistsAsync(testRole.Name).Result) {
roleManager.CreateAsync(testRole);
}
Es funktioniert und die Rolle in der Datenbank erstellen. Diese Überprüfung erzeugt jedoch immer einen Overhead für die Datenbank und ruft den spezifischen Controller/Vorgang auf. Also ich möchte einmal überprüfen, nachdem meine Anwendung gestartet wurde, wenn die benutzerdefinierte Rolle vorhanden ist und sie hinzufügen. Die Methode ConfigureServices
in Startup.cs scheint dafür gut zu sein.
Aber: Wie kann ich eine Instanz der RoleManager<IdentityRole>
Klasse dafür erstellen? Ich würde gerne einen Best-Practice-Ansatz hier verwenden und nicht herumrennen, indem ich abhängige Instanzen selbst erstellen würde, was eine Menge Arbeit verursacht, da es nicht gut dokumentiert ist und sicher nicht den Best Practices folgen wird, da ASP.NET Core verwendet Abhängigkeitsinjektion für solche Dinge (was meiner Meinung nach auch vernünftig ist).
Mit anderen Worten: Ich brauche abhängige Injektion außerhalb eines Controllers. Hier
Sie vielleicht in meinem Projekt interessiert sein, die Verwaltung für Identity-Benutzer bereitstellt, Rollen und Ansprüche https://github.com/joeaudette/cloudscribe –