【问题标题】:Role or claim based authorization? Or hybrid? [closed]基于角色或声明的授权?还是混血儿? [关闭]
【发布时间】:2017-11-27 22:53:30
【问题描述】:

我有一个 ASP.NET MVC 项目,客户需要不同角色的单独访问权限。他想拥有很多角色,但其中一些角色的访问权限非常相似(除了一些事情)。当然,我可以像下面这样:

if (User.IsInRole("Superadmin") || User.IsInRole("CompanyAdmin") || ...)
{
   // bla-bla-bla
}
else if (....)
{
}

但是,在我看来,它并没有应有的灵活。任何小的权利变化都需要脚本来审查整个项目并进行更改。

我认为采用“混合”方法,即像现在一样为用户设置角色,并设置声明。因此事后只检查声明,而不是角色列表。如果需要更改任何角色的访问权限,则只需在登录后在一个地方添加/删除声明(甚至不需要将其保存到数据库)。

你怎么看?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5 roles claims-based-identity claims


    【解决方案1】:

    对所有内容都使用声明。一些声明可以简单地是 - 角色。因此,您可以拥有具有 Claim: role > CompanyAdmin 的用户,但同一用户也可以拥有 Claim: canAccessSuperadminDashboard > true (或任何您想要定义附加权限的方式)。

    当您将这两者结合起来时,您会得到非常精细的方法,您的第一次检查可以是针对角色声明,然后对于更精细的事情,您可以检查特定声明。

    这种方法的一个好处是您的角色声明被映射到主要用户,因此您的 Authorize(Roles="Admin") 直接与角色声明一起工作。

    【讨论】:

    • 但它需要我创建一个长列表来检查每个允许的角色和 canAccessSuperadminDashboard 。我只想检查一项声明...
    • 只检查一项声明?那是行不通的,除非您想拥有与所有可能权利的排列一样多的主张。这将是,有点嗯...尴尬:)
    猜你喜欢
    • 2014-05-01
    • 2018-02-10
    • 2021-04-13
    • 2022-01-01
    • 1970-01-01
    • 2020-09-23
    • 2017-12-14
    • 2017-04-12
    相关资源
    最近更新 更多