Рендеринг элемента на основе ролей, назначенных другому контроллеру / действию - PullRequest
0 голосов
/ 02 июня 2018

В ASP.NET Core 2 в Windows, в представлении, скажем, контроллер 1, у меня есть несколько ссылок, которые указывают на действия контроллера 2. Эти действия помечены атрибутом Authorize.Например:

[Authorize(Roles = @"Domain\Group1, Domain\Group1")]
[Authorize(Roles = @"Domain\User1")]
public IActionResult DisplaySomething()
{
    return View();
}

Я не хочу создавать / отображать ссылки, если текущий пользователь не имеет доступа к этому контроллеру / действию.Итак, с точки зрения контроллера 1, как я могу проверить, авторизован ли пользователь для вызова действий контроллера 2?

1 Ответ

0 голосов
/ 02 июня 2018

Самым примитивным образом вы ставите следующее:

@if (User.IsInRole("Domain\Group1"))
{
    <div>Only visible for Domain\Group1 users</div>
}

Лучше сделать из этого HtmlHelper.

Чтобы предотвратить получение ролями именРаспространяясь по всему вашему приложению, вы можете работать с политиками .

Вместо ролей, которые вы используете, вы указываете имя политики в методе действия для настройки доступа к этому методу.

[Authorize(Policy = "MyPolicy")]
public IActionResult DisplaySomething()
{
    return View();
}

В представлении вы решаете, следует ли отображать что-либо с помощью проверки с помощью этого имени политики.

@if ((await AuthorizationService.AuthorizeAsync(User, "MyPolicy")).Succeeded)
{
    <div>Only visible for users matching the rules defined in policy MyPolicy</div>
}

В ConfigureServices вы указываете, например,.какие роли должны быть проверены в данной политике.

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options => {

        options.AddPolicy("MyPolicy", policy => {
        policy.RequireAuthenticatedUser();
        policy.RequireRole("Domain\Group1");
        // ...
        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...