Ограничение Доступа к Методу Действия в ASP.NET Core MVC. Продолжение
Начало
Атрибут Authorize
Существует также встроенный атрибут
[Authorize], который может быть применён к классам контроллеров или методам действий, но не реализует ни один из этих интерфейсов. Он допускает несколько ограничений:- Политика: ограничение по именованной политике, которая должна быть определена.
- Роли: одна или несколько ролей, разделённых запятыми. Текущий пользователь должен иметь одну из указанных ролей. Роли берутся из утверждений запроса.
Возможно наличие нескольких атрибутов [Authorize]:
- если в одном [Authorize] несколько ролей, пользователю необходимо иметь одну из них;
- если в нескольких [Authorize] заданы роли, пользователь должен иметь их все.
То же относится и к политикам.
Атрибут
[AllowAnonymous], если присутствует, обходит любой атрибут [Authorize].[Authorize(Roles = "Admin")]
//все методы действия контроллера требуют роли "Admin"
public class AdminController
: Controller
{
public IActionResult Index()
{ … } //требует роли "Admin"
[AllowAnonymous]
public IActionResult SignOut()
{ … } //может быть вызван кем угодно
}
Если мы хотим использовать именованные политики, мы должны определить их:
builder.Services.AddAuthorizationBuilder()
.AddPolicy("AdminPolicy", p =>
{
p.RequireRole("Admin");
p.RequireAuthenticatedUser();
});
Теперь можно использовать политику "AdminPolicy":
[Authorize(Policy = "AdminPolicy")]
public IActionResult Restricted()
{ … } //требует удовлетворять политике "AdminPolicy"
Роли и политики
Это разные способы управления доступом. Роли напрямую сопоставляются с требованиями аутентификации или группами пользователей, в зависимости от используемого типа аутентификации. Политики же позволяют настраивать требования, которые могут включать роли, но не ограничиваются этим. В определении политики мы можем требовать:
- аутентификации:
RequireAuthenticatedUser();- утверждений (claim):
RequireClaim();- одной из ролей:
RequireRole();- определённого имени:
RequireUserName();- определённого условия:
RequireAssertion().А также:
- Объединять несколько политик:
Combine();- Добавлять требования:
AddRequirements().Имена политик должны быть уникальными и могут использоваться в различных местах, связанных с авторизацией.
Также возможно иметь более структурированный и переиспользуемый контроль доступа, об этом далее.
Окончание следует…
Источник: https://developmentwithadot.blogspot.com/2025/10/restricting-access-to-action-method-in.html