4

在 asp.net core 中很容易定义页面和文件夹的剃须刀页面授权,如下所示:

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");
    });

问题是它仍然不起作用。就像我没有定义策略一样。当我登录时,我可以看到该页面,当我没有登录时,它会将我重定向到登录表单。

为了让它工作,我还需要做些什么吗?

4

2 回答 2

4

我发现出了什么问题。为了在我从角色中删除用户后应用更改,我必须注销并再次登录,以便框架将刷新用户允许查看的内容。

这确实是一个问题,因为如果用户具有管理员角色并且出于某种原因我们想要阻止他访问敏感数据,那么在他注销之前我们无法阻止他。

当我从他的帐户中删除角色时,有没有办法刷新用户的权限?

重新启动应用程序并没有删除他的权限。刷新权限的唯一方法是在他注销时。

于 2018-01-09T22:43:26.817 回答
2

这是因为用户的 cookie 仍然有效。这里有一个解决方案的更多解释。尽管它在 ASP.NET 中,但相同的概念应该适用于您的 Razor Pages 项目:

在 ASP.NET 身份框架中更改时刷新当前用户的角色?

于 2018-05-06T23:09:52.557 回答