Приложение «обнаруживает» пользователь в настоящее время просматривает приложение и может правильно отображать домен /имя пользователя. < /p>
Я написал класс, который проверяет зарегистрированные в имени пользователя и получает роли из базы данных, а затем обновляет текущий принципал, чтобы пользовательский интерфейс мог правильно воспользоваться данными роли для Пользователь. p>
Код: Выделить всё
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>
Я также добавил приведенный выше класс в качестве службы в startup.cs < /p>
services.AddScoped();
< /code>
Теперь, на любой странице бритвы, я просто делаю: < /p>
@page "/counter"
@inject CompanyAuthentication auth
Welcome admin
You are not authorized
Есть ли способ автоматически ввести мой класс на каждую страницу без необходимости выполнять @Inject ?
Мне известно, что я могу написать пользовательский класс аутентификации, который наследует AuthenticationStateProvider , а затем добавить его как Сервис, но если я это сделаю, я потеряю доступ к в настоящее время введенном в настоящее время в имени пользователя, и, таким образом, я не могу получить роли из базы данных. < /p>
Я попытался использовать httpcontext.current. User.identity.name Но это не в сфере приложения в приложении Balzor Server.
Как я могу воспользоваться Windows AuthenticationStateProvider и в то же время настраивайте его роли, не вводясь настройку повсюду?
Подробнее здесь: https://stackoverflow.com/questions/727 ... server-app