为 asp.net MVC 中的角色分配访问权限



我找到的大多数关于 asp.net mvc 访问权限的文章/示例都与使用角色限制对特定控制器的访问有关,但我试图弄清楚如何将特定访问权限分配给属于特定角色的用户。

我的方案相当简单,因为唯一需要在用户级别具有访问权限的角色是"工作人员"角色:

  • 管理员:访问所有功能。
  • 员工:访问特定功能。
  • 成员:无法访问特定功能。

理想情况下,我想实现类似于以下内容的东西

@if (@User.IsInRole("IsAdmin") || (@User.IsInRole("IsStaff") && 
@User.HasAccess("DownloadData"))
{
<a href='@Url.Action("DownloadData"....
</a>    
}

我有一个单独的表,用于存储员工访问权限,并且由于这些权限是在用户级别分配的,因此我使用的是AspNetUsers中生成的相同Id,因此当我登录以获取特定员工的相关访问权限时,简单的 EF/SQL Linq 联接就可以解决问题。

现在我的问题是:

  1. 我能否通过引入新功能来扩展@User(主体)以具有类似于上述的场景,例如HasAccess我可以在其中传递需要为特定工作人员检查的访问权限。

  2. 如果无法完成 1.,将登录用户的访问权限传递给用于构建页面的 ViewModel 是否可行?是不是风险太大了?我是否错误地认为这应该没问题,因为这是基于服务器的代码并且不会传递给客户端?

  3. 如果1和2不合适,实现此目的的最佳/推荐方法是什么?

谢谢

最简单的方法是在IPrincipalIClaimsPrincipal上创建一个扩展方法。这样,您可以在一个位置统一访问权限定义。如果您有很多访问权限检查,也许您需要将访问权限添加为声明(如果您使用的是声明)或以某种方式缓存它们,这样您就不需要每次都进行数据库访问(如果它们存储在数据库中)。

此外,如果您将访问权限传递给视图,这是对的,因为视图呈现为 HTML。但是,恕我直言,第一个选项要好得多,因为您无需使用访问权限检查来弄乱控制器。

最新更新