(.NET核心3.1应用程序)
现在,我可能被这个逼得走投无路.
文件夹结构
要访问Account
文件夹,用户需要在角色administrator
中
options.Conventions.AuthorizeAreaFolder("Administration", "/Account", "RequireAdministrator");
options.AddPolicy("RequireAdministrator", policy => policy
.RequireRole("Administrator")
.RequireAuthenticatedUser());
我想要什么
我创建了一个新角色:DataConsulter
,我想让它访问Account/Records
,但我不希望它在administrator
角色中。此外,administrator
用户访问Account/Records
文件夹不应该需要这个新角色。在不改变文件夹结构的情况下,我能做到这一点吗?我应该吗?
我想我想要这样的东西(在删除了@jb11 11所建议的先前访问之后):
options.AddPolicy("RequireAdministrator", policy => policy
.RequireRole("Administrator" || "DataConsulter")
.RequireAuthenticatedUser());
发布于 2021-11-03 10:57:56
当您调用AuthorizeAreaFolder
时,AuthorizeAttribute
就是PageApplicationModel
's EndpointMetadata
的已添加。
因此,要重写对特定文件夹的授权,需要删除该属性。这可以通过调用AddFolderApplicationModelConvention
、标识属性和删除属性来实现。
options.Conventions.AddFolderApplicationModelConvention("/Account/Records", action =>
{
var authorizeAttribute = action.EndpointMetadata.FirstOrDefault(r => r is AuthorizeAttribute {Policy: "RequireAdministrator"});
if (authorizeAttribute != null)
{
action.EndpointMetadata.Remove(authorizeAttribute);
}
});
https://stackoverflow.com/questions/69821491
复制相似问题