【问题标题】:Authorize(Roles =RolesPropertyWhichComesFromDb) dynamicly role based authorized controllersAuthorize(Roles =Roles PropertyWhichComesFromDb) 动态基于角色的授权控制器
【发布时间】:2022-01-15 23:47:45
【问题描述】:

我想知道我是否可以像这样控制我所有的[Authorize(Roles =RolesPropertyWhichComesFromDb)] 控制器,因为我的项目中有很多角色,我想从数据库中动态控制它们。我想改变可以以动态方式执行操作的角色。

举个例子:假设有一个控制器名为ProductsController。如果我想用角色授权该控制器,我需要做的就是将[Authorize(Roles="Admin, Blogger, etc.."] 放在控制器的顶部?

我想以动态方式从数据库中更改那些 Roles="Admin, Blogger, etc.." 值。

这样可以吗?

如果是,那怎么办?

如果不是,为什么?

【问题讨论】:

  • 也许这是你可以使用的东西stackoverflow.com/questions/56224181/…。除了自定义授权属性之外,您可能可以使用 roleManager 来实现您想要实现的目标
  • @AchoVasilev 我看到了这个问题,但我正在寻找更多资源来创建更好的结构。谢谢
  • 我已经完成了所有的研究并达到了我的目的。这是一个很长的故事,但如果你想学习,请告诉我,我会尽力教你!
  • 你能用一些代码把它作为这个线程的答案发布吗?
  • 当然,我会在我创建完该结构后发布它。我正在等待我的团队负责人确认这种方式。我按照这个来源创建了我的结构,你们可以看看:borakasmer.com/…

标签: asp.net .net authentication .net-core authorization


【解决方案1】:

一种选择是实现您自己的授权处理程序,如 here 所述。

使用这种方法,您可以例如动态查找授权。对于更高级的情况,您还可以拥有多个必须为 true 的处理程序。

另一种选择是使用 lambda 表达式定义策略,如 here 所述。

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("BadgeEntry", policy =>
        policy.RequireAssertion(context => context.User.HasClaim(c =>
            (c.Type == "BadgeId" || c.Type == "TemporaryBadgeId")
            && c.Issuer == "https://microsoftsecurity")));
});

【讨论】:

  • 非常感谢您提供的资源,但我想我发现了一些更有用的东西。这是土耳其语内容,但看起来很有希望:borakasmer.com/…
猜你喜欢
  • 2019-12-30
  • 2013-09-28
  • 2016-08-04
  • 2018-02-14
  • 2016-05-22
  • 2020-06-22
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多