У меня есть поведение Blazor-сервера. У меня есть собственный провайдер аутентификации. Он отлично работает, когда роли назначаются внутри метода GetAuthenticationStateAsync
. Но если я извлекаю назначение методу, то тег <<strong> Authorized > внутри компонентов не работает, несмотря на то, что @content.User.Identity
содержит все назначенные утверждения. Вот что у меня внутри моего GetAuthenticationStateAsync
метода в моем CustomAuthenticationStateProvider
:
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
var username = await localStorage.GetItemAsync<String>("user");
var token = await localStorage.GetItemAsync<String>("token");
var isValid = Utils.Utils.Instance.CheckUserToken(username, token);
ClaimsIdentity identity;
if (isValid)
{
Users u = Utils.Utils.Instance.GetUserByToken(token);
// IF I EXTRACT FOLLOWING CODE INTO A METHOD, THEN <Authorized> TAG WILL NOT WORK
identity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, username)
}, "Password");
if (Roles.IsAdmin(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "admin"));
}
if (Roles.IsAgent(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "agent"));
}
if (Roles.IsClub(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "club"));
}
if (Roles.IsPlayer(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "player"));
}
// ----------------- end of extraction ----------------------------------------
}
else
{
identity = new ClaimsIdentity();
}
var user = new ClaimsPrincipal(identity);
return await Task.FromResult(new AuthenticationState(user));
}
И вот как я извлекаю метод с назначением утверждений:
private ClaimsIdentity SetIdentity(Users u)
{
var identity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, u.UserName)
});
if (Roles.IsAdmin(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "admin"));
}
if (Roles.IsAgent(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "agent"));
}
if (Roles.IsClub(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "club"));
}
if (Roles.IsPlayer(u.RoleMask))
{
identity.AddClaim(new Claim(ClaimTypes.Role, "player"));
}
return identity;
}
Вопрос : Почему присвоение внутри тела метода работает для тега <<strong> Authorized > и почему оно не работает для тега <<strong> Authorized > при его извлечении в метод?