【问题标题】:Role based Authorization for Razor PagesRazor 页面的基于角色的授权
【发布时间】:2018-06-18 21:39:03
【问题描述】:

在 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 页面。

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

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

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Index", "RequireAdministratorRole");
    });

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

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

【问题讨论】:

  • 如果它表现得像你没有定义策略,那么也许你没有添加行来使用身份验证:app.UseAuthentication();
  • 我用过。我真的不知道它有什么问题。我可能必须添加其他东西才能激活它。

标签: asp.net-core asp.net-core-2.0 razor-pages


【解决方案1】:

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

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

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

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

【讨论】:

  • 我认为您最好提出一个新问题,而不是将其添加到此答案中。
  • 好的。我会尝试提出一个新问题。谢谢你 Ruard。
  • @pitaridis 我发现您的注销然后登录提示非常有用,点赞!你有新问题的链接吗?谢谢。
【解决方案2】:

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

Refresh current user's role when changed in ASP.NET identity framework?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 2022-01-01
    • 2018-04-10
    • 2014-03-19
    • 2017-12-14
    • 2017-04-12
    • 2018-07-21
    相关资源
    最近更新 更多