我们在开发系统的时候,经常会遇到系统需要权限控制,而权限的控制程度不同有不同的设计方案。
1. 基于角色的权限设计
这种方案是最常见也是比较简单的方案,不过通常有这种设计已经够了,所以微软就设计出这种方案的通用做法,这种方案对于每一个操作不做控制,只是在程序中根据角色对是否具有操作的权限进行控制;这里我们就不做详述
2. 基于操作的权限设计
这种模式下每一个操作都在数据库中有记录,用户是否拥有该操作的权限也在数据库中有记录,结构如下:
但是如果直接使用上面的设计,会导致数据库中的UserAction这张表数据量非常大,所以我们需要进一步设计提高效率,请看方案3
3. 基于角色和操作的权限设计
如上图所示,我们在添加了Role,和RoleAction表,这样子就可以减少UserAction中的记录,并且使设计更灵活一点。
但是这种方案在用户需求的考验之下也可能显得不够灵活够用,例如当用户要求临时给某位普通员工某操作权限时,我们就需要新增加一种新的用户角色,但是这种用户角色是不必要的,因为它只是一种临时的角色,如果添加一种角色还需要在收回此普通员工权限时删除此角色,我们需要设计一种更合适的结构来满足用户对权限设置的要求。
4. 2,3组合的权限设计,其结构如下:
我们可以看到在上图中添加了UserAction表,使用此表来添加特殊用户的权限,改表中有一个字段HasPermission可以决定用户是否有某种操作的权限,改表中记录的权限的优先级要高于UserRole中记录的用户权限。这样在应用程序中我们就需要通过UserRole和UserAction两张表中的记录判断权限。
到这儿呢并不算完,有可能用户还会给出这样的需求:对于某一种action所操作的对象某一些记录会有权限,而对于其他的记录没有权限,比如说一个内容管理系统,对于某一些频道某个用户有修改的权限,而对于另外一些频道没有修改的权限,这时候我们需要设计更复杂的权限机制。
5. 对于同一种实体(资源)用户可以对一部分记录有权限,而对于另外一些记录没有权限的权限设计:
对于这样的需求我们就需要对每一种不同的资源创建一张权限表,在上图中对Content和Channel两种资源分别创建了UserActionContent和UserActionChannel表用来定义用户对某条记录是否有权限;这种设计是可以满足用户需求的但是不是很经济,UserActionChannel和UserActionContent中的记录会很多,而在实际的应用中并非需要记录所有的记录的权限信息,有时候可能只是一种规则,比如说对于根Channel什么级别的人有权限;这时候呢我们就可以定义些规则来判断用户权限,下面就是这种设计。
6. 涉及资源,权限和规则的权限设计
在这种设计下角色的概念已经没有了,只需要Rule在程序中的类中定义用户是否有操作某种对象的权限。
此文章转自http://www.cnblogs.com/yukaizhao/archive/2007/04/15/user_role_action_permission.html
相关推荐
1、基于角色的权限设计 2、基于操作的权限设计 3、基于角色和操作的权限设计 4、2,3组合的权限设计,其结构如下: 5、 对于同一种实体(资源)用户可以对一部分记录有权限,而对于另外一些记录没有权限的权限设计: ...
应用程序系统中,权限的设计,分析,数据库设计
一套 多应用程序 用户 权限管理 中心 数据库设计,如有不好,请提出建议,多多见谅!
DTCloud中台包括(文档管理,BIM管理,IOT管理), 微信服务号, 钉钉应用集成,微信小程序商城, 中国城市数据,无码开发平台,报表设计器,权限设计器, DTCloud Python API, CMS新闻发布系统,可视化大屏设计器...
行业文档-设计装置-Android平台下的应用程序权限管理方法.zip
web应用程序等,权限设计,数据库表实现,设计文档详细描述权限设计
MFC Window 应用程序设计 任哲等,不错的书籍,以前传过分块的几个版本,突然今天发现,评论中被骂得不行了!看看权限,有70M的权限了,自己上传个完整的吧!以前就10M的权限,就得分三拨,没办法!
(因为本人上传权限只有20M,所以将本书分成两个压缩包,此为第二部分。)书比较老了,但是对于希望在Windows下写程序的人来说是一本不错的入门经典书籍。本书不是一些秘籍、30天速成之类的教程。如果你有此需求请...
足,并给出了基于安全距离的权限机制扩展方案,为描述应用程序的安全性提 供了一个量化方案。 (2)仔细研究了 Android 组件式程序结构,发现了其中存在着无法限制不安全的数据传递的问题。根据这一缺陷,设计了一种新的...
权限设计通常包括数据库设计、应用程序接口(API)设计、程序实现三个部分。 这三个部分相互依存,密不可分,要实现完善的权限治理体系,必须考虑到每一个环节可行性与复杂程度甚至执行效率。 我们将权限分类,首先...
ReadTestquestion 7.5. 课程设计作业 第8章 日历记事本 8.1. 设计内容 8.2. 设计要求 8.3. 总体设计 8.4. 具体设计 8.4.1. 运行效果与程序发布 8.4.2. 主类CalendarPad 8.4.3. 记事本...
Lotus.Domino.Designer.6应用程序...表单和页面、域、视图和文件夹、帧结构集的设计,添加应用程序的自动功能······ (因权限只能上传15MB以下的文件,所以将此书一分为二,下载完1后需要下载2才可以正常解压)
3.7.2 权限设置模块的程序设计 29 3.8 部门设置模块 30 3.8.1 部门设置模块的界面设计 30 3.8.2 部门设置模块的程序设计 31 3.9 档案设置模块 32 3.9.1 档案设置模块的界面设计 32 3.9.2 档案设置模块的程序设计 33 ...
高焕堂<应用框架原理与程序设计>源代码(Eclipse) 36计本人全部测试通过。比较难的地方而书中没有相关解释的有加注释。 关于第36计windows下编译.so文件: 写C组件注意事项:将NativeHalfAdder抽出只有类定义和函数...
DTCloud应用程序可以作为独立应用程序使用,也可以无缝集成其它应用系统。DTCloud可以开发ERP,OA,CRM,智慧城市,小程序等。DTCloud中台包括(文档管理,BIM管理,IOT管理), 微信服务号, 钉钉应用集成,微信小程序...
13.6.2 高级主题:使用fifo的客户/服务器应用程序 464 13.7 cd数据库应用程序 468 13.7.1 目标 469 13.7.2 实现 469 13.7.3 客户接口函数 472 13.7.4 服务器接口server.c 478 13.7.5 管道 481 13.7.6 对cd...
Bootstrap 是快速开发 Web 应用程序的前端工具包。它是一个 CSS,HTML 和 JS 的集合,它使用了最新的浏览器技术,给你的 Web 开发提供了时尚的版式; AJAX,创建交互式网页应用的网页开发技术。 【设计思路】 用户...
13.6.2 高级主题:使用fifo的客户/服务器应用程序 464 13.7 cd数据库应用程序 468 13.7.1 目标 469 13.7.2 实现 469 13.7.3 客户接口函数 472 13.7.4 服务器接口server.c 478 13.7.5 管道 481 13.7.6 对cd...
数据权限设计 在当前的许多应用程序中都会涉及到权限管理,权限主要分为功 能权限和数据权限,至于功能权限相对简单些,网上也有不少的实 现方案,这里不再介绍,下边主要探讨下数据权限的设计方案。 数据权限跟...