Razor 页面基于角色的授权

pit*_*dis 5 asp.net-core asp.net-core-2.0 razor-pages

在asp.net core中,定义页面和文件夹的razor页面授权非常容易,如下所示:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    });
Run Code Online (Sandbox Code Playgroud)

我的问题是我想在我的项目中使用角色,但我找不到一种方法来定义允许哪些角色查看页面内容。

我尝试使用 Authorize 属性,但它不适用于 Razor Pages。

AuthorizePage 可以采用第二个参数,该参数可用于定义将用于确定当前用户是否可以看到指定页面的策略。我使用它如下:

services.AddAuthorization(options =>
{
    options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Admin"));
});

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Index", "RequireAdministratorRole");
    });
Run Code Online (Sandbox Code Playgroud)

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

为了使其发挥作用,我还必须做其他事情吗?

pit*_*dis 4

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

\n\n

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

\n\n

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

\n\n

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

\n