Как проверить соответствие политике авторизации на стороне предстваления?

Для проверки соответствия политике авторизации на стороне представления в C# можно использовать атрибуты, предоставляемые фреймворком ASP.NET Core.

ASP.NET Core предлагает три основных атрибута для проверки политик авторизации: [Authorize], [AllowAnonymous] и [Authorize(Roles = "Роль")].

1. Атрибут [Authorize] применяется к контроллеру или отдельным методам, и он требует, чтобы пользователь был аутентифицирован, чтобы иметь доступ к защищенному ресурсу. Например:

[Authorize]
public class RestrictedController : Controller
{
    public IActionResult Index()
    {
        // Код контроллера
        return View();
    }
}

В этом случае, если пользователь не аутентифицирован, он будет перенаправлен на страницу входа.

2. Атрибут [AllowAnonymous] используется для разрешения доступа к защищенным ресурсам без требования аутентификации. Например:

[AllowAnonymous]
public class PublicController : Controller
{
    public IActionResult Index()
    {
        // Код контроллера
        return View();
    }
}

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

3. Атрибут [Authorize(Roles = "Роль")] позволяет требовать определенную роль у пользователя для доступа к защищенному ресурсу. Например:

[Authorize(Roles = "Администратор")]
public class AdminController : Controller
{
    public IActionResult Index()
    {
        // Код контроллера
        return View();
    }
}

В этом случае только пользователи с ролью "Администратор" смогут получить доступ к методу контроллера.

Вы также можете определить собственные атрибуты для проверки политик авторизации, на основе требований вашего приложения. Для этого вам понадобится создать класс атрибута, который реализует интерфейс IAuthorizationRequirement, и класс обработчика политики авторизации, который реализует интерфейс IAuthorizationHandler.

Например, вы можете создать собственный атрибут:

public class MinimumAgeAttribute : AuthorizeAttribute
{
    public MinimumAgeAttribute(int age)
    {
        Age = age;
    }

    public int Age { get; set; }
}

Затем создайте обработчик:

public class MinimumAgeAuthorizationHandler : AuthorizationHandler<MinimumAgeAttribute>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context, 
        MinimumAgeAttribute requirement)
    {
        // Ваша логика проверки политики авторизации

        // Если условие выполняется, вызывайте метод Succeed()
        context.Succeed(requirement);

        return Task.CompletedTask;
    }
}

Теперь вы можете использовать свою собственную политику авторизации:

[MinimumAge(21)]
public class RestrictedController : Controller
{
    public IActionResult Index()
    {
        // Код контроллера
        return View();
    }
}

В этом примере доступ к методу контроллера будет разрешен только пользователям, возраст которых больше 21 года.