在asp.net核心中,很容易为页面和文件夹定义剃须刀页面授权,如下所示:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
我的问题是我想在我的项目中使用角色,但我找不到一种方法来定义允许哪些角色查看页面的内容。
我尝试使用Authorize属性,但它不适用于Razor Pages。
AuthorizePage可以使用第二个参数,该参数可用于定义将用于确定当前使用是否可以查看指定页面的策略。我用它如下:
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Admin"));
});
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Index", "RequireAdministratorRole");
});
问题是它仍然没有工作。它的行为就像我没有定义政策一样。当我登录时,我可以看到该页面,当我没有登录时,它会将我重定向到登录表单。
为了使其有效,我还需要做些什么吗?
答案 0 :(得分:3)
我发现了什么问题。为了在从角色中删除用户后应用更改,我必须注销并再次登录,以便框架刷新用户允许查看的内容。
这确实是一个问题,因为如果用户有管理员角色,并且出于某种原因我们想阻止他访问敏感数据,我们就无法阻止他直到他注销。
当我从他的帐户中删除某个角色时,有没有办法刷新用户的权限?
重新启动应用程序并未删除其权限。刷新权限的唯一方法是他退出时。
答案 1 :(得分:0)
这是由于用户的cookie仍然有效。以下是解决方案的更多解释。虽然它在ASP.NET中,但相同的概念应该适用于您的Razor Pages项目:
Refresh current user's role when changed in ASP.NET identity framework?