基于角色或声明的授权?还是杂交?

时间:2017-06-24 13:42:28

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

我有一个ASP.NET MVC项目,客户需要对不同角色进行单独访问。他希望有很多角色,但是其中一些角色具有非常相似的访问权限(除了一些东西)。当然,我可以像下面那样:

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

然而,在我看来,它并不像应有的那样灵活。权限的任何小变化都要求脚本检查整个项目并进行更改。

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

您怎么看?

1 个答案:

答案 0 :(得分:2)

对所有事情使用索赔。一些声明可以简单地说 - 角色。因此,您可以让用户拥有Claim:role> CompanyAdmin但同一用户也可以拥有Claim:canAccessSuperadminDashboard> true(或者您想要定义其他权利的任何方式)。

当你将两者结合起来时,你会得到非常精细的方法,你可以先进行角色声明检查,然后检查特定声明的更细微的内容。

此方法的一个好处是您的角色声明已映射到Principal用户,因此您的Authorize(Roles =“Admin”)直接与角色声明一起工作。