Я признаю, что никогда не пробовал что-то подобное раньше, но я почти уверен, что у политик должно быть имя, и атрибут authorize будет ссылаться на него.
Может быть, что-то подобное будет работать, если каждая запись конфигурацииу вас в цикле есть поле идентификатора, в данном случае я называю его заголовком.
var c= _configuration.GetSection(nameof(Configuration)).Get<List<Configuration>>();
foreach (Configuration r in c)
{
services.AddAuthorization(options => {
options.AddPolicy("RolePolicy" + r.title, policy =>
policy.RequireRole(r.RoleMembers.Split(",")));
});
}
Я думаю, что ваш раздельный вызов для участников роли сработает, но я не пробовал.
И при условии, что заголовок для одной из записей в разделе конфигурации был «AdminOnly»
[Authorize(Policy = "RolePolicyAdminOnly")]
Я думаю, что это даст вам то, что вы хотите.
Редактировать: На самом деле я забираю это,Я думаю, что разделение для расширения ролей членов не удастся, так как это должен быть список строки, разделенный запятыми, а запятая отсутствует в строке. Я не уверен, что это можно определить из конфига. Возможно, вам придется изучить IAuthorizationService и переместить ваши записи за пределы конфигурации.