Ich vermeide EntityFramework- und Core -Identitäts -Gerüstcode aus Gründen, die ich hier nicht teilen kann. p>
Code: Select all
public class CompanyAuthentication
{
public CompanyAuthentication(AuthenticationStateProvider auth)
{
var result = auth.GetAuthenticationStateAsync().Result;
// here I have access to the current username:
string username = result.User.Identity.Name;
// now I can fetch roles from file, but for simplicity, I will use the following:
if(username.BeginsWith("admin"))
{
var claims = new ClaimsIdentity(new Claim[] {new Claim(ClaimType.Role, "admin")});
result.User.AddIdentity(claims); // this will have an effect on UI
}
}
}
< /code>
Ich habe auch die obige Klasse als Dienst in startup.cs < /p>
hinzugefügtservices.AddScoped();
< /code>
Jetzt, auf jeder Rasierseite, mache ich einfach: < /p>
@page "/counter"
@inject CompanyAuthentication auth
Welcome admin
You are not authorized
Gibt es eine Möglichkeit, meine Klasse automatisch in jede Seite zu injizieren, ohne @Inject ?
Ich bin mir bewusst, dass ich eine benutzerdefinierte Authentifizierungsklasse schreiben kann Als Service, aber wenn ich das tue, verliere ich den Zugriff auf den aktuell angemeldeten Benutzernamen und ich kann daher keine Rollen aus der Datenbank abrufen. .User.ididentity.name Aber das liegt nicht im Bereich eines Teils in einer Balzor -Server -App.
Wie kann ich Windows nutzen AuthenticationStateProvider und gleichzeitig ihre Rollen anpassen, ohne die Anpassung überall injizieren zu müssen?