转摘
一种常用的权限控制算法的实现,参考LINUX/UNIX权限编码
这里笔者介绍一种很常用,也比较专业的权限控制思路。
要换成其他的语言主,自己转一下就可以了。
这里用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;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:
首先,一个系统可能有很多的操作,
因此,请建立数据字典,以便查阅,修改时使用。
其次,如果用数据库储存用户权限,请注意数值的有效范围。
操作权限值请用唯一的整数!
分享到:
相关推荐
根据给定文件的信息,本文将深入探讨一种经典的权限控制算法实现方法,并对该算法进行详细的解析。权限控制在软件系统特别是涉及用户交互的应用程序中尤为重要,它确保了不同用户角色能够访问到与其职责相匹配的数据...
通用权限管理系统是一款基于BS(Browser-Server)架构的应用程序,主要设计用于实现高效、安全的用户管理和权限控制。此类系统通常包含三个核心模块:用户管理、登录验证以及权限管理。 **用户管理**是权限管理系统...
【标题】中的“ExtJS+JAVA通用后台权限管理源码”指的是一个使用ExtJS前端框架与Java后端技术实现的通用权限管理系统。ExtJS是一种基于JavaScript的富客户端框架,用于构建交互式用户界面,而Java则是一种广泛使用的...
本文件主要探讨的是通用的加密算法在Java和Android中的应用,包括基础的编码算法如Base64,以及可能涉及的对称加密、非对称加密和哈希摘要算法。 1. **Base64编码**: 这是一种用于将二进制数据转换为可打印字符的...
首先,`java.awt.Image`是一个抽象类,它提供了一种通用的接口来表示图像数据。`Image`对象可以从网络、文件、内存或其他来源获取,但它的方法通常是非同步的,意味着它们可能不会立即返回结果,而是在图像数据可用...
5. **授权(Authorization)**:权限管理是系统安全的关键,可能涉及到角色基础的访问控制(RBAC)或者基于策略的访问控制(PBAC)。Java的`java.security.acl`和`javax.security.auth`包提供了相关的API。 6. **...
**基于Java的两个通用安全模块的设计与实现** 本资源提供了一套全面且通用的Java安全模块设计方案,可广泛应用于各类Java应用系统中。该模块包括两个主要部分:身份认证和权限控制,旨在确保系统的安全性。 **身份...
Java作为一种面向对象的语言,其设计时就考虑到了安全性,内置了丰富的安全机制,如类加载器、访问控制、安全管理器等。这些特性使得Java成为开发安全应用的理想选择。 第一个通用安全模块是身份验证和授权模块。...
综上所述,Java 1.7以上版本的通用解压工具涵盖了Java I/O、压缩算法、第三方库的使用、多线程、错误处理、API设计等多个方面的知识,为开发者提供了一个强大的工具,简化了在Java项目中处理压缩文件的工作。
本文通过对“JAVA源码基于Java的两个通用安全模块的设计与实现(源代码+论文)”的主题进行深入分析,详细介绍了身份认证模块和权限控制模块的设计思路和技术实现。这些安全模块不仅能够有效提升系统的安全性,还能...
在IT行业中,Web应用系统的设计和...总的来说,Web应用系统菜单及权限控制是一个涉及数据库交互、数据结构、算法和安全性等多个方面的复杂任务。理解并掌握这一过程有助于构建高效、安全且用户体验良好的Web应用系统。
本文将详细探讨基于Java的两个通用安全模块的设计与实现,旨在提供一套适用于多种应用场景的安全解决方案。 首先,我们来了解一下Java语言在安全方面的特性。Java作为一种跨平台的编程语言,内置了强大的安全机制,...
这个模块的核心功能是验证用户的身份并控制其对系统资源的访问权限。身份验证通常涉及到用户凭据,如用户名和密码,通过与预定义的凭证数据库进行比较来确认用户身份。而授权则决定了验证过的用户可以执行哪些操作。...
在创建通用权限管理项目时,我们通常会涉及以下模块: 1. **用户模块**:用于存储和管理用户信息,包括用户名、密码、联系方式等。我们可以使用Spring Boot集成的JPA(Java Persistence API)和MySQL数据库来实现...
2. 权限管理模块:在Java中,我们可以使用AccessController和Permission类来控制代码的执行权限。这个模块可能展示了如何定义、检查和管理权限,以防止非法操作。 3. SSL/TLS通信模块:为了在网络中安全传输数据,...
在本毕业设计项目中,"基于Java的两个通用安全模块的设计与实现",我们主要探讨的是如何使用Java语言来构建安全、可靠的应用程序。Java作为一种跨平台的编程语言,广泛应用于各种领域,尤其是在网络和企业级应用中,...
### JAVA源码基于Java的两个通用安全模块的设计与实现 #### 概述 在现代软件开发过程中,安全性已经成为了一个至关重要的方面。对于基于Java的应用程序而言,设计并实现可靠的通用安全模块是确保系统稳定性和数据...
2. **Java Authentication and Authorization Service (JAAS)**:JAAS提供了认证和授权服务,使得用户身份验证和权限控制变得简单。开发者可以通过实现JAAS的配置和登录模块,来定制不同的认证策略,如基于用户名/...
本文将深入探讨如何使用Java进行企业微信通用开发配置,以及Servlet在其中的作用。 首先,企业微信(Work WeChat)是腾讯公司为企业打造的一款高效办公平台,它提供了丰富的API接口,允许开发者构建各种定制化的...