这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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的单操作权限判断的代码:
//userPurview是用户具有的总权限
//optPurview是一个操作要求的权限为一个整数(没有经过权的!)
public static boolean checkPower(int userPurview, int optPurview)
{
int purviewValue = (int)Math.pow(2, optPurview);
return (userPurview & purviewValue) == purviewValue;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!
分享到:
相关推荐
Java作为一种广泛使用的编程语言,同样提供了多种方法来实现流量控制。本篇文章将深入探讨Java如何实现流量控制,并结合具体实例来阐述相关知识点。 首先,我们要理解流量控制的基本原理。在TCP(传输控制协议)中...
根据给定文件的信息,本文将深入探讨一种经典的权限控制算法实现方法,并对该算法进行详细的解析。权限控制在软件系统特别是涉及用户交互的应用程序中尤为重要,它确保了不同用户角色能够访问到与其职责相匹配的数据...
需要注意的是,license 控制只是软件保护的一种方法,不能保证软件的绝对安全。为了确保软件的安全,需要采取多种保护措施,例如加密、数字签名、访问控制等。 本示例提供了一个基本的 license 控制实现,可以用于 ...
本文将围绕一种经典的权限管理算法展开讨论,通过对算法原理的解析以及示例代码的展示,帮助读者深入理解这种算法的应用场景与实现方式。 #### 二、算法原理 该算法基于二进制位运算来实现权限管理。通过为不同的...
在结合JSON Web Tokens(JWT)的情况下,可以创建一种无状态的身份验证机制,使得在分布式系统中更方便地处理权限。 首先,我们需要引入Shiro和JWT相关的依赖库。在上述描述中,可以看到引入了两个Maven依赖,分别...
总之,B+树算法的Java实现是一种技术挑战,它需要开发者具备对数据结构和算法的深入理解,以及对Java语言特性的熟悉。通过研究和实践,可以加深对B+树在数据库索引构建和文件系统管理中应用的理解,并能够开发出性能...
Java权限设置是一种常用的权限控制方法,用于控制用户对系统资源的访问权限。在Java中,我们可以使用位运算来实现权限控制。下面是Java权限设置的知识点: 1. 权限控制算法:我们可以使用位运算来实现权限控制。...
在IT行业中,远程桌面监控是一种常见且实用的技术,它允许用户通过网络访问并控制远端计算机的桌面。这里我们关注的是一个用Java实现的远程桌面监控解决方案。Java作为一种跨平台的编程语言,提供了丰富的API和库,...
1. **Dijkstra算法**:这是一种贪心算法,从起始节点开始,逐步扩展最短路径到相邻节点,直到到达目标节点。每次选择当前未访问节点中距离起点最近的一个进行处理。在Java中,我们可以使用优先队列(PriorityQueue)...
在IT行业中,二维码作为一种便捷的信息传递方式,被广泛应用于各种场景,如下载应用程序、访问网站、支付等。本文将深入探讨如何使用JAVA实现扫描二维码自动下载对应客户端类型的APP功能。 首先,我们需要理解...
**克贝洛斯加密算法(Kerberos)**是一种广泛应用于网络身份验证的协议,它在信息安全领域扮演着至关重要的角色。Kerberos基于对称密钥加密技术,旨在为用户提供安全的服务,防止中间人攻击和其他形式的身份欺诈。在...
通过"java0323"这个文件名,我们可以推测这可能是项目的源代码或者某个开发阶段的成果,具体细节可能包括类结构、模块划分、关键算法实现等。不过,由于没有提供具体的文件内容,我们无法深入探讨这些细节。
图书馆资料检索系统是一种基于计算机技术的信息管理工具,用于高效、准确地查找和管理图书馆内的各类文献资源。在Java环境下实现的此类系统,充分利用了Java语言的跨平台特性、丰富的类库以及面向对象的设计理念,为...
Apriori算法是一种基于频繁项集的挖掘方法,它通过迭代的方式生成不同支持度的频繁项集,从而找出关联规则。而FP-Growth算法则通过构建FP树来提高效率,尤其在处理大规模数据时更为高效。这两种算法的Java实现涉及...
在Java开发中,实现自动补全功能是一种常见的需求,特别是在Web应用中,它可以极大地提高用户输入的效率和体验。这个项目使用了Java后端技术和AJAX前端技术来完成这一功能。接下来,我们将深入探讨如何利用Java和...
【Java实现的考试系统】是一种基于Java编程语言开发的在线教育平台,主要用于组织、管理和进行各种类型的考试。这个系统包含了多个关键模块,旨在提供全面的考试管理服务。 1. **添加试题**:此功能允许管理员或者...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB...
**单例模式**是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。其特点包括: 1. **单一实例**:确保类仅有一个实例。 2. **自我创建**:由单例类自己创建和管理这个唯一实例。 3. **...
Java 编写的 BBS 源码是一种基于 Java 语言实现的在线讨论平台,它提供了用户交流、发帖、回帖、搜索等功能。这个论坛系统是完全由 Java 语言构建的,利用了 Java 的面向对象特性、多线程以及网络编程能力。下面将...
4. **哈弗曼编码**:哈弗曼编码是一种数据压缩技术,Java可以实现这个算法。文件可能包含构建哈弗曼树、编码和解码的过程。 5. **JDBC连接**:Java数据库连接(JDBC)是Java访问数据库的标准API。`java的jdbc连接....