权限管理确是个很麻烦的问题
例如,一个系统中,有N个模块,每个模块有添加,删除,修改,完全控制,列表等权限
有N个用户,现在的问题是,通常,我们会建立一个数据表来表示权限分配,这个数据表的一般形式是
用户ID 添加 删除 修改 完全控制
3 0 1 1 3
这样一般来说没什么问题,突然有一天,你需要有一种新权限例如叫做运行,这时候,问题就来了,你得更改数据表,添加对应的字段呀,不光如此,
程序中的逻辑也有问题了
当然,也有更聪明的兄弟使用另一种设计方法,就是包含式权限设计,类似WINDOWS系统中,每一种权限,将包含前一种权限,例如
读取是最基本的,运行包含读取,列表包含运行,修改包含列表以此类推,用数字表示就是
读取 1
列表 2
运行 3
修改 4
删除 5
....
以此类推,这样,就将第一种方法的扩展问题解决掉了,当有新的权限时,在应用程序中,为其指定一个新的权值就可以了,在实际判断权限中,例如
,判断有无修改权,就比较用户权限值是不是大于或等于4,就可以了
听起来不错,似乎解决了问题,但是,再想想看,不对,这个设计的确使权限的扩展性强了,可是,也使权限体系的灵活性降低了,为什么呢?假如,有
一个用户,我想给他读取,修改两种权限,而不想给他运行和列表权限,这下怎么办呢?这个设计是等级制的权限,权限具有自高往低的包含,因此,
根本无法实现这种自由组合
难道真的没有办法了吗?
NO!
每一种权限,相当于一种开关,也就是一个BIT,假如我们将这些权限,每一种权限用一位表示,那么,整个权限体系,不过是个BIT序列而已,也就是
说不过是二进制的011010而已,这样一来,就好解决问题了
同样的问题,我们这样假设:
第一位 表示 读取
第二位 表示 运行
第三位 表示 修改
第四位 表示 删除
......
以此类推,假如,我们想给一个用户分配运行和修改权限,其他权限都不给予,于是,他的权限字符串可以表示为:0110,这样,用若干个位的组合,我
们就解决了权限的灵活组合问题(位组合这种解决方案,真是比比皆是,其实,他就是一种数据结构而已,我们叫他UNION?)
另外一方面呢?如何扩展?扩展就更容易了,当添加新的权限时,可以直接在高位加上一位即可
如何判断有无某权限呢?我们可以直接取某位的值,根据其0,一来判断即可
最后,实际上,C/C++/C#中,你可以做得更棒,那就是定义一个枚举类型,例如:
enum rights
{
read,
list,
exec,
write,
delete
}
这样的好处是用名字来引用权限,就更好了
判断权限时,可以使用按位与,例如,用户权限为100001
而运行需要的权限是1000
两者按位与的结果是00000000,显然无此权限,用公式表示就是
RN & R=RN,则代表用户有此权限,我的意思是
所需权限&用户权限=所需权限 符合此条件,即表明有权限
写的比较抽象,但是,相信有权限设计经验的朋友一看就明白了
我也是在最近设计一个系统时,被客户的变化逼的不行,后来,受<编程珠玑>一书中第一章关于对100万个电话号码进行排序的文章中受到的启发
分享到:
相关推荐
### 数据结构算法与应用——C++语言描述 #### 核心知识点详解 ##### 1. 数据结构与算法的重要性 在程序开发中,高效地描述数据和设计算法是解决现实问题的关键。这要求开发者具备数据结构和算法设计的专业知识。...
“操作系统笔试面试笔记.docx”、“简单网络笔试面试笔记.docx”、“面试技巧总结.docx”以及“linux笔试面试笔记.docx”分别涵盖了操作系统、网络、面试策略和Linux系统方面的重点知识。“面试题”系列文档则提供了...
在本资源中,我们主要探讨...这对于提升Android编程技巧、理解游戏逻辑设计以及AI算法的应用都是宝贵的实践机会。同时,这个项目也可以作为进一步改进和扩展的基础,例如加入联网对战功能、优化AI算法或改善用户体验。
【北大计算机及应用操作系统上机题】主要涵盖了操作系统的基础理论及其在实践中的应用,是北京大学计算机及应用专业的重要课程组成部分。这门课程旨在通过上机实验的方式,让学生深入理解操作系统的内部工作原理,并...
在Excel VBA(Visual Basic for Applications)中,创建登录系统和实现权限管理是常见的需求,尤其是在数据管理和自动化处理中。这个压缩包“ExcelVBA登录系统与权限管理.zip”很可能包含了一个示例项目,用于教导...
通过学习“操作系统原理及应用(Linux)”,你将不仅能够理解操作系统背后的复杂机制,还能掌握实际操作Linux系统的技巧,这对于系统管理员、软件开发者和任何希望深入了解计算机系统工作原理的人来说都是非常有价值...
在《计算机应用技巧大全——十万个为什么》这个资源中,我们可以发现它涵盖了计算机领域的多个方面,包括基础操作、操作系统、办公软件使用、编程知识、硬件维护以及网络技术等。这是一份非常适合计算机初学者和进阶...
掌握这些库的使用和优化技巧,可以提升应用的运行效率。 5. **应用程序框架层** 这一层提供了应用程序开发所需的各种服务和API,如Activity Manager、Content Provider等。深入理解框架层,能编写出更符合设计模式...
3. **效率优化**:探讨如何通过数学技巧和优化算法提高IBE的加密和解密速度,减少计算资源消耗,以适应大规模应用。 4. **应用案例**:可能包含IBE在实际应用中的案例,如在云存储、移动通信和物联网设备中的应用,...
### 使用递归算法删除多级子目录的知识点 在计算机编程领域中,处理文件系统相关的操作是一项常见的任务,其中就包括删除目录...掌握了递归算法的原理及其在具体场景中的应用,可以帮助程序员更加高效地解决实际问题。
通过这些试题的解答,学生可以检验自己对操作系统基本原理的理解和实际应用能力,同时也能提升在算法设计与分析上的思维能力和问题解决技巧。这些知识不仅是理论学习的基础,也是进入IT行业,特别是软件开发岗位的...
设计模式与算法的结合,意味着我们将讨论如何在软件设计中应用和优化算法,以提高系统的性能和可维护性。在《设计模式》中,可能会涵盖如何利用设计模式来改进算法的实现,或者如何设计模式能够帮助选择和实现更适合...
6. **算法应用**: 算法广泛应用于数据处理、人工智能、游戏开发、网络设计等领域,理解并运用算法对于解决复杂问题至关重要。 ### 知识点二:百度网盘分享 1. **百度网盘简介**: 百度网盘是中国领先的网络云存储...
3. 文件系统:学习文件的组织、存储、检索和保护方式,以及磁盘调度算法,这对于理解数据持久化和提高文件操作效率具有重要意义。 4. I/O系统:涵盖中断、DMA(直接内存访问)和缓冲技术,理解这些有助于设计高效的...
14. **嵌入式系统设计流程**:从需求分析、系统设计、模块划分、编码、测试到系统集成,整个开发流程中的方法和技巧。 15. **应用层软件开发**:根据实际需求,开发用户界面、网络通信、数据库管理等功能,可能涉及...
8. **高级算法技巧**:学习一些竞赛中可能用到的高级技巧,例如二分图的最大匹配问题、网络流问题、NP完全问题等。 9. **编程能力的锻炼**:算法竞赛要求选手能够快速准确地编程实现各种算法,因此还需要锻炼良好的...