这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用java语言描述,其实都差不多的。要换成其他的语言主,自己转一下就可以了。为了方便起见,我们这里定义a^b为:a的b次方。这里,我们为每一个操作设定一个唯一的整数值,比如:
删除A---0
修改A---1
添加A---2
删除B---3
修改B---4
添加B---5
理论上可以有N个操作,这取决于你用于储存用户权限值的数据类型了。
这样,如果用户有权限:添加A---2;删除B---3;修改B---4。那用户的权限值 purview =2^2+2^3+2^4=28,也就是2的权的和了。化成二进制可以表示为11100。这样,如果要验证用户是否有删除B的权限,就可以通过位与运算来实现。在Java里,位与运算运算符号为&,即是:
int value = purview &((int)Math.pow(2,3));
你会发现,当用户有操作权限时,运算出来的结果都会等于这个操作需要的权限值!
原理:
位与运算,顾名思义就是对位进行与运算:
以上面的式子为例:purview & 2^3 也就是 28&8
将它们化成二进制有
11100
& 01000
-------------------
01000 == 8(十进制) == 2^3
同理,如果要验证是否有删除A---0的权限
可以用:purview &((int)Math.pow(2,0));
即:
11100
& 00001
------------------------
00000 == 0(十进制) != 2^0
这种算法的一个优点是速度快。可以同时处理N个权限。如果想验证是否同时有删除A---0和删除B---3的权限,可以用purview&(2^0+2^3)==(2^0+2^3)?true:false;设置多角色用户。根据权限值判断用户的角色。
下面提供一个java的单操作权限判断的代码:
Java代码
//userPurview是用户具有的总权限
//optPurview是一个操作要求的权限为一个整数(没有经过权的!)
public static boolean checkPower(int userPurview, int optPurview){
int purviewValue = (int)Math.pow(2, optPurview);
return (userPurview & purviewValue) == purviewValue;
}
//userPurview是用户具有的总权限
//optPurview是一个操作要求的权限为一个整数(没有经过权的!)
public static boolean checkPower(int userPurview, int optPurview){
int purviewValue = (int)Math.pow(2, optPurview);
return (userPurview & purviewValue) == purviewValue;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!
分享到:
相关推荐
从广义相对论到量子场论,甚至在计算机图形学中模拟曲面的算法,高斯绝妙定理都扮演着不可或缺的角色。通过阅读高斯的原始论文,我们不仅能够领略到数学之美,还能够理解到数学如何在不同的科学领域中发挥着连接和...
例如,在编程中,理解“变量”、“循环”、“函数”、“算法”等概念对于编写有效代码至关重要。 2. 代码注释的作用:编写代码时,良好的注释能够提高代码的可读性。注释就像是给代码添加了“绝妙好词”,它可以向...
通达信指标公式源码绝妙箱体主图指标 通达信指标公式源码绝妙箱体主图指标是基于通达信软件平台的技术指标,用于股票、期货、外汇等金融市场的分析和预测。本指标包括多种技术指标,例如移动平均线、相对强弱指标、...
- **用户和权限**:每个数据库用户都有特定的权限,控制其对数据库的访问。 - **角色**:一组权限的集合,方便权限管理。 - **对象权限和系统权限**:分别控制对特定对象和全局数据库操作的访问。 5. **PL/SQL...
1. **基础语法**:包括变量声明、类型转换、运算符优先级、流程控制(如if-else、switch-case、循环)等。 2. **内存管理**:理解栈和堆的区别,如何使用new和delete操作动态内存,以及如何避免内存泄漏。 3. **...
世界营销绝妙点子.doc
企业公司的绝妙工资条
### 绝妙贪吃蛇源代码解析 #### 概述 本篇将深入解析一个用C语言编写的经典游戏——贪吃蛇的源代码。该程序利用了`graphics.h`库来实现图形界面,使玩家能够在一个设定好的区域内控制一条蛇去吃随机出现的食物,并...
此外,模板可以设置只读权限,防止非授权修改,保护敏感信息。 4. **数据分析与报告** 对于企业来说,通讯录不仅是联系信息的集合,还是了解员工结构、部门分布的重要工具。Excel的图表功能可以将通讯录数据转化为...
绝妙企业通讯录
企业公司的绝妙工资条.xls
【作品名称】:绝妙企业通讯录Excel 模板 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。
绝妙企业通讯录excel模版下载.xlsx
风河工程师写的绝妙嵌入式系统书籍
绝妙的VFP高级指南、普通指南,对你的编程也许有些帮助吧,O(∩_∩)O哈哈~
删除tableView单元格或呈现新viewController的绝妙方法_Objectiv.zip”的压缩包中,我们关注的核心是HYPanViewController-master文件,它很可能包含了一个示例项目或者一个自定义的table view控制器的源代码。...
绝妙的营销案例,高手赚钱的秘诀。
【作品名称】:企业公司的绝妙工资条Excel 模板 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。