gpt4 book ai didi

ASP.NET MVC 授权 : Permissions in Place of Roles

转载 作者:行者123 更新时间:2023-12-02 07:02:26 25 4
gpt4 key购买 nike

我知道这个问题已经被反复问过,但我正在尝试在 ASP.NET MVC 应用程序中实现基于权限而不是基于角色的授权。因此,我需要拥有 ViewTask、AddTask、DeleteTask 等权限,而不仅仅是拥有 Manager、Admin 或 User 等高级角色。我已经阅读了大量对此的评论,似乎最简单的解决方案是将角色视为权限并定义 ViewTask、AddTask 和 DeleteTask 的“角色”。

这样的方法真的是个好主意吗?我的一些担忧是,根据应用程序的大小,您最终可能会拥有超过 100 个角色,这将排除在 cookie 中进行角色缓存的能力,因此每次对 User.IsInRole 的调用都会访问数据库。如果每个操作方法都用 [Authorize(Roles="XXXX")] 进行装饰,我会遇到严重的性能问题吗?

我的另一个问题是,我仍然希望保留角色的概念,以便管理员可以简单地将用户与具有预定义权限集的角色关联起来。使用上述方法,我的想法是在我的应用程序中创建一个名为 Group 的单独实体,该 Group 将负责跟踪分配给该 Group 的 ASP.NET 角色。因此,当用户与组关联时,我可以检索需要分配给该用户的 ASP.NET 角色并添加所有角色。

有人以这种方式实现过系统吗?对这种方法的任何意见或想法将不胜感激。

谢谢

最佳答案

我同意 @jlew 关于缓存用户数据以及当缓存过期时 - 只需重新加载它即可。尝试强制这些数据保持持久性是没有用的。此外,如果您想放弃 ASP.net 角色提供程序,您可以像我一样部署自己的安全性 described in this reply 。这样做的优点是允许针对角色/个人权限使用非常自定义的安全解决方案。

以下只是我最近一直在尝试的一个想法(只是一些值得深思的东西)。为什么不使用 MVC 的 RESTful url 来定义“权限”。例如:

/tasks/add 可以定义添加任务的权限。这些可以以某种方式分层,以便为用户授予 /tasks/add 权限也授予他们对 /tasks 权限。然后,您可以使用全局操作过滤器来构建给定路由值的 URL。这也将允许通过运行时配置单个项目安全性的真正有趣的方法。例如,/tasks/edit/23 可以以某种方式授予 ID 为 23 的任务的编辑权限。不管怎样,这可能根本没有帮助……但这只是我认为你可能会考虑一下。

干杯!

关于ASP.NET MVC 授权 : Permissions in Place of Roles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com