Мне показалось, что этот вопрос заслуживает ответа с примером кода ... Принимая предложение @ tvanfosson о расширении класса AuthorizeAttribute
, вот что я придумал (критика приветствуется).
AuthorizeFromConfiguration.cs
public class AuthorizeFromConfiguration: AuthorizeAttribute
{
public new string Roles
{
get {
return base.Roles;
}
set {
var config = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("authorization.json")
.Build();
base.Roles = config[value];
}
}
}
authorization.json
{
"Parts": {
"Create": "contoso.com\\MyWebApp_CreateNewPart",
"Edit": "contoso.com\\MyWebApp_EditPart"
}
}
Пример использования :
[AuthorizeFromConfiguration(Roles = "Parts:Create")]
public class CreateModel : PageModel
{
//...
}
Примечание. В моем тестировании веб-сайт необходимо было перезапустить до того, как вступили в силу любые изменения в файле authorization.json
, даже когда я попытался изменить логику так, чтобы файл JSON читался на методе доступа get
вместо set
.