ASP.NET MVC授权:角色的权限

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

这样的做法真的是个好主意吗?我的一些担忧是,根据应用程序的大小,您可以获得超过100个角色,然后排除在Cookie中执行角色缓存的能力,因此每次调用User.IsInRole都会触发数据库。如果每个操作方法都将使用[Authorize(Roles =“XXXX”)]进行装饰,我会看到严重的性能问题?

我的另一个问题是,我仍然希望保持角色的概念,以便管理员可以简单地将用户与具有预定义权限集的角色相关联。使用我以上思路的方法是在我的应用程序名为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的任务的编辑权限。无论如何,这甚至可能不是有帮助的…但是只是以为我想你可能会考虑。

干杯!

相关文章

项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并。 使用了...
安装新版本的Nginx(vim /etc/yum.repos.d/nginx.repo) [nginx-stable] name=nginx stable repo baseu...
什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功...
在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。 ## Docker Desktop介绍及安装 Do...
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求...
银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主...