这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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权限控制的算法,通过二进制数据来实现对权限的赋值,比对,提高了计算机运行效率也清晰一目了然
根据给定文件的信息,本文将深入探讨一种经典的权限控制算法实现方法,并对该算法进行详细的解析。权限控制在软件系统特别是涉及用户交互的应用程序中尤为重要,它确保了不同用户角色能够访问到与其职责相匹配的数据...
- **移动应用**:随着移动互联网的发展,移动应用同样面临着权限管理的需求,这种算法同样适用于移动平台上的权限控制。 #### 六、总结 通过以上分析可以看出,这种经典的权限管理算法不仅原理简单易懂,而且具有...
- 发送和接收邮件时可能会遇到网络问题或权限错误,因此需要适当的异常处理机制。 9. **代码示例** 发送邮件的基本代码片段如下: ```java Properties props = new Properties(); props.put("mail.smtp.host",...
Java权限设置是一种常用的权限控制方法,用于控制用户对系统资源的访问权限。在Java中,我们可以使用位运算来实现权限控制。下面是Java权限设置的知识点: 1. 权限控制算法:我们可以使用位运算来实现权限控制。...
许多第三方库,如Apache Commons Net,提供了高级的流量控制功能,比如TCPNoDelay选项可以关闭Nagle算法,减少小包延迟,提高实时性;而TCPKeepAlive可以检测网络连接状态,避免死连接占用资源。 总结来说,Java...
Java中的权限控制是Web开发中一个重要的组成部分,它确保了应用程序的安全性和用户访问的合法性。Apache Shiro是一个强大且易用的Java安全框架,提供认证、授权、加密和会话管理功能,简化了处理安全需求的过程。在...
在 Java 中,license 控制是指通过生成和验证数字签名来控制软件的使用权限。这种方法广泛应用于 J2EE 应用中,特别是在系统购买的早期,提供有限制的 license 文件对系统进行限制。 在本示例中,我们使用 RSA 算法...
访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch ...
MD-RBAC(Role-Based Access Control,基于角色的访问控制)是权限管理的一种模型,它将用户与权限关联到特定的角色上。用户通过扮演不同的角色来获得相应的操作权限。这种模型简化了权限管理,因为只需要管理角色的...
在Java和Android环境中,可以使用开源库如KalmanFilter或者自定义算法来实现。 4. **平滑算法**:除了纠偏外,还可以通过平滑算法改善轨迹。例如,线性插值、Spline插值、Lowess平滑等,这些方法能够平滑轨迹,使得...
基于Springboot的推荐算法短视频平台系统设计与实现.系统分为管理员与普通用户两种角色。 1)登录模块 在进入系统首页后,首先看到的是登录界面,该界面会提供注册用户的功能,公告、平台咨询、视频中心、登录、注册...
Java Cryptography Extension (JCE) 是Java平台的一个重要组件,主要负责提供高级的加密功能,支持各种加密算法,包括对称加密、非对称加密、哈希函数和数字签名等。在Java的标准版本中,出于安全性考虑,对于某些...
### Java程序控制键盘鼠标知识点详解 #### 一、引言 在软件开发过程中,有时我们需要让Java程序模拟用户的操作行为,比如自动填写表单、触发特定事件或进行自动化测试等场景。通过Java程序来实现对鼠标键盘的控制...
此外,系统可能还需要实现权限控制、日志记录、异常处理等功能,这将涉及Spring Security、Log4j等相关技术。 在系统设计阶段,需要考虑到数据模型的建立,例如,学生、社团、活动等实体及其之间的关系。同时,还要...
在JAVA环境中实现Kerberos加密算法,我们可以利用Java Cryptography Extension (JCE) 提供的相关类库。 **Kerberos的工作原理:** 1. **票证授予服务(TGS)**:用户首先通过与Ticket Granting Server (TGS)通信,...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
7. **权限管理**:为了防止未经授权的访问,远程控制软件通常会包含权限管理系统,比如用户认证、角色权限分配等。 8. **错误处理与日志记录**:为了保证软件的稳定性和可维护性,良好的错误处理和日志记录机制是必...
java中有四种访问控制权限:public、private、protected和default。其中,private是最严格的访问控制权限,只能在定义该类的包中的其他类才能访问该类。 题目2:java关键字 java语言中有许多关键字,例如public、...