Я реализовал управление доступом на основе ролей (RBAC) в проекте ASP.NET Core. Я требую, чтобы пользователь принадлежал хотя бы к одной роли Active Directory, в зависимости от того, в какой среде развернут код (DEV, STAGING, PROD). Код ниже работает. Однако вместо того, чтобы использовать несколько ролей для каждой среды, теперь мне необходимо использовать одну «вложенную»/сгруппированную/иерархическую роль, т.е. новая роль объединяет другие роли. Использование новой роли AD больше не работает. Я подтвердил, что являюсь участником новой роли, но получаю сообщение об ошибке авторизации. Я не могу найти ничего в Интернете, чтобы обсудить, можно ли использовать сгруппированные роли в ASP.NET Core.
public void ConfigureServices(IServiceCollection services)
{
try
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc().AddApplicationPart(typeof(ProcessController).Assembly).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddRequestScopingMiddleware(() => _scopeProvider.Value = new Scope());
services.AddCustomControllerActivation(Resolve);
services.AddCustomViewComponentActivation(Resolve);
services.AddAuthorization(options =>
{
var policyBuilder = new AuthorizationPolicyBuilder().RequireAuthenticatedUser();
switch (HostingEnvironment.EnvironmentName)
{
case "Development":
policyBuilder.RequireRole("roleA", "roleB");
//policyBuilder.RequireRole("roleAandB");//this doesn't work
break;
case "Staging":
policyBuilder.RequireRole("roleC", "roleD");
break;
case "Production":
policyBuilder.RequireRole("roleE", "roleF");
break;
default:
policyBuilder.RequireRole("roleG");
break;
}
options.AddPolicy("Environment", policyBuilder.Build());
});
}
catch (Exception e)
{
_logger.Error(e, "Unhandled exception");
throw;
}
}
[Authorize(Policy = "Environment")]
public class ProcessController : ControllerBase
{
...
}
Как использовать вложенные роли в авторизации ASP.NET Core?