Установка утверждений вне GetAuthenticationStateAsyn c не влияет на теги <Authorized> - PullRequest
0 голосов
/ 20 июня 2020

У меня есть поведение 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 > при его извлечении в метод?

...