`
liss
  • 浏览: 842449 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一种常用的权限控制算法的实现

阅读更多

  这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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;
}

  当然,多权限的验证只要扩展一下就可以了。

  几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!

http://pcedu.pconline.com.cn/empolder/gj/java/0607/835188.html

分享到:
评论

相关推荐

    一种常用的权限控制算法的实现.htm

    一种常用的权限控制算法的实现.htm

    权限控制算法的实现,很经典的

    根据给定文件的信息,本文将深入探讨一种经典的权限控制算法实现方法,并对该算法进行详细的解析。权限控制在软件系统特别是涉及用户交互的应用程序中尤为重要,它确保了不同用户角色能够访问到与其职责相匹配的数据...

    用户登录权限分配的模型与算法实现

    ### 用户登录权限分配的模型与算法实现 #### 一、引言 随着计算机硬件技术和软件平台的快速发展,军事管理信息系统(Military Management Information System,简称MMIS)已成为军队现代化管理的重要工具之一。...

    经典权限管理算法

    本文将围绕一种经典的权限管理算法展开讨论,通过对算法原理的解析以及示例代码的展示,帮助读者深入理解这种算法的应用场景与实现方式。 #### 二、算法原理 该算法基于二进制位运算来实现权限管理。通过为不同的...

    VB常用算法大全

    VB中的算法实现通常涉及到对基本数据类型的操作,如整数、浮点数、字符串,以及更复杂的数据结构,比如数组和集合。在编写人事管理系统时,可能会用到以下知识点: 1. **数据存储与检索**:在CS(客户端/服务器)...

    java实现流量控制流量控制

    Java作为一种广泛使用的编程语言,同样提供了多种方法来实现流量控制。本篇文章将深入探讨Java如何实现流量控制,并结合具体实例来阐述相关知识点。 首先,我们要理解流量控制的基本原理。在TCP(传输控制协议)中...

    用户权限管理模块(C++实现)

    综上所述,"用户权限管理模块(C++实现)"是一个集成了C++面向对象编程、单例模式、用户权限控制和密码安全管理的实用系统。通过这样的设计,可以有效地控制和保护软件系统的资源,为用户提供安全、便捷的使用体验。

    空管系统中监视CPU占用率的一种算法实现.pdf

    本文主要讨论了一种针对空管系统中CPU占用率的监测算法的实现方法。 首先,文章指出在基于SNMP(简单网络管理协议)的网管系统中,扩展MIB(管理信息库)以加入CPU占用率对象,是实现远程监控的关键。通过周期性地...

    基于CP-ABE算法的区块链数据访问控制方案.pdf

    CP-ABE算法是一种基于属性的加密算法,能够实现细粒度的访问控制。该算法可以将用户的属性作为加密的key,从而实现对数据的访问控制。在本方案中,CP-ABE算法被应用于实现用户级细粒度安全访问控制区块链数据。 ...

    模板方法模式 实现通用的权限控制

    实现这些功能时,如果每一种权限都编写重复的代码来检查用户是否有相应的权限,那么这不仅会导致代码冗余,还会增加后期维护的复杂度。 #### 模板方法模式原理 模板方法模式的核心思想在于定义一个算法的骨架,并...

    qt5AES加密,ES加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推

    AES是一种广泛使用的对称加密算法,以其高效和安全性著称。"ES加密/解密算法"可能是描述错误,通常指的是AES算法在Elasticsearch(ES)中的应用,因为标签提到了"Elasticsearch",而且在安全领域,Elasticsearch也会...

    基于神经网络算法的移动云计算数据安全访问控制办法与实现.pdf

    朱爱梅和黄毅在《基于神经网络算法的移动云计算数据安全访问控制办法与实现》一文中提出了一种结合神经网络算法的移动云计算数据安全访问控制办法。文章从传统技术和创新访问控制模型两个角度分析了神经网络算法在...

    Linux下模拟软件互斥实现算法

    由荷兰计算机科学家Dijkstra提出,它是最早的并发控制算法之一。Dekker算法基于两个进程间的通信,每个进程都有一个变量表示它是否准备访问共享资源。当两个进程都准备访问时,它们会通过比较对方的状态来决定哪一个...

    电鳗觅食优化算法EEFO

    - **levy.m**:Levy飞行分布,是一种常用的模拟自然界的随机游走过程,常用于优化算法的全局探索。 - **license.txt**:软件许可文件,描述了代码的使用权限和条款。 在MATLAB中实现EEFO算法,需要结合生物启发式...

    在Spring Boot中使用Spring Security实现权限控制

    - BCrypt是一种常用的密码哈希算法,可以有效防止彩虹表攻击。在Spring Security中,我们可以在`UserDetailsService`的实现类中使用`BCryptPasswordEncoder`对用户密码进行加密存储。 - 当用户尝试登录时,Spring ...

    一种实现在线注册与权限分离的工业物联网身份认证协议.docx

    本文协议提出了一种新的实现方法,利用非对称公钥密码算法保证在线注册的安全性,允许用户和SN在不安全环境下进行注册。同时,协议结合轻量级的对称密钥算法,旨在解决IIoT的高可靠性、实时性和安全性需求。通过权限...

    用python运用常用算法实现餐厅信息管理系统(课程大作业)

    在本项目中,"用Python运用常用算法实现餐厅信息管理系统"是一个典型的计算机科学课程大作业,旨在让学生掌握Python编程语言以及常见算法的应用。这个系统可能包括顾客管理、菜品管理、订单处理等多个模块,通过实际...

    多CPU控制系统时间片轮转调度的一种算法.pdf

    本文介绍了一种基于STD总线的9CPU控制系统,采用8098微处理器,其中主处理机负责管理时间片的分配,确保所有从处理机能公平访问公共资源。主处理机根据各个从处理机的状态动态分配时间片,允许从处理机在分配到的...

Global site tag (gtag.js) - Google Analytics