Asp.net core 基于角色的Razor页面授权

Asp.net core 基于角色的Razor页面授权,asp.net-core,asp.net-core-2.0,razor-pages,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.All

在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");
    });
services.AddAuthorization(options =>
{
    options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Admin"));
});

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Index", "RequireAdministratorRole");
    });
我的问题是我想在我的项目中使用角色,但我找不到一种方法来定义允许哪些角色查看页面内容

我尝试使用Authorize属性,但它不适用于Razor页面

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

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    });
services.AddAuthorization(options =>
{
    options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Admin"));
});

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Index", "RequireAdministratorRole");
    });
问题是它仍然不起作用。这就好像我没有定义政策一样。当我登录时,我可以看到页面,当我没有登录时,它会将我重定向到loggin表单


为了让它工作,我还必须做些什么吗?

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

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

当我从用户帐户中删除角色时,是否有方法刷新用户权限


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

这是因为用户的cookie仍然有效。这里有更多的解释和解决方案。虽然它位于ASP.NET中,但同样的概念也适用于Razor Pages项目:


如果它表现为您没有定义策略,那么可能您没有添加使用身份验证的行:
app.UseAuthentication()我用过它。我真的不知道它出了什么问题。我可能需要添加其他内容才能激活它。我想你最好问一个新问题,而不是将它添加到这个答案中。好的。我将尝试提出一个新问题。谢谢你,鲁德。@pitaridis我发现你的注销和登录提示非常有用,向上投票!你有新问题的链接吗?谢谢