这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!
- 浏览: 78716 次
- 性别:
- 来自: 北京
最新评论
-
memoryisking:
关于更多ConcurrentModificationExcep ...
java.util.ConcurrentModificationException原因 -
memoryisking:
关于更多TimeUnit的内容可以去看这里: 发生Concu ...
java.util.ConcurrentModificationException原因 -
yzzshmily:
yzzshmily 写道我今天也遇到这种情况了, checkC ...
谷歌浏览器中的 name 变量 -
yzzshmily:
我今天也遇到这种情况了, checkClientName(ne ...
谷歌浏览器中的 name 变量
相关推荐
总的来说,“springboot_shiro_thymeleaf权限控制”项目提供了一个实用的示例,展示了如何在Spring Boot应用中集成Shiro进行权限管理,并使用Thymeleaf创建动态视图。这为开发者提供了一个良好的起点,便于理解和...
基于角色的权限控制(Role-Based Access Control,简称RBAC)是一种有效的访问控制策略,它将权限与角色关联,用户通过角色获取相应的权限。在大型系统中,这种模型能够有效地简化权限管理和分配,尤其是在用户数量...
基于树型结构的BS系统权限控制方法是一种创新且实用的技术方案,它结合了RBAC的优势,针对Web信息系统中资源动态变化的特点,提供了一种灵活高效、易于扩展的权限管理机制。通过系统资源树的构建和用户权限数据包的...
总结来说,“简单实用权限管理系统”旨在平衡用户便利性和系统安全性,通过有效的权限控制,保护了数据资产,提高了系统的整体效率。理解并实施这样的系统,对于任何组织的信息化建设都是至关重要的。
总的来说,这个压缩包提供的 "开箱即用的支持多租户的 Casbin 权限控制应用" 是一个非常实用的工具,可以帮助你快速在多租户环境中实现细粒度的权限管理。通过深入理解和定制,你可以充分利用 Casbin 的功能,构建一...
在Java Web开发中,访问权限控制是至关重要的一个环节,它确保了只有具有相应权限的用户才能访问特定的资源或执行特定的操作。本示例主要通过Filter技术来实现这一功能,这是一种常见且实用的方法。 首先,我们需要...
在企业级应用中,Cognos作为一款强大的商业智能工具,其权限控制...通过上述步骤,方案二不仅大幅简化了大规模用户环境下的权限管理复杂性,还有效提升了系统的安全性与稳定性,是Cognos权限控制实践中的一种实用策略。
MyBatis 数据权限控制插件是一种实用工具,用于在基于 MyBatis 的应用程序中实现细粒度的数据访问权限管理。这种插件可以帮助开发者更轻松地实施业务逻辑中的数据过滤,确保用户只能访问他们被授权查看的数据。在...
角色权限控制(Role-Based Access Control,简称RBAC)是一种广泛应用于现代Web应用程序的访问控制模型。在RBAC中,用户通过扮演不同的角色来获取相应的权限,而不是直接将权限赋予单个用户。这种模型大大简化了权限...
1. **权限控制策略**:比如基于角色的访问控制(RBAC)、基于资源的访问控制(ABAC)等。RBAC是最常见的,通过角色分配权限,而ABAC更加灵活,可以根据资源属性、用户属性、环境等因素动态决定权限。 2. **权限粒度...
PB权限控制(Tag法)是一种在PowerBuilder应用中实现精细化权限管理的方法,尤其适用于需要控制大量权限项的系统。...总的来说,PB权限控制(Tag法)是一种实用的权限管理策略,尤其适用于大型、复杂的多用户系统。
总的来说,"C#标准三层架构简单实用权限系统(含数据库)"是一个实用的开发资源,适用于那些希望学习或快速实现权限管理功能的C#开发者。通过理解并实践这个项目,开发者不仅可以掌握C#编程,还能深化对软件设计模式...
功能实用,市面上安全框架常见能力与套路均已具备:支持 RESTful 权限控制,支持灵活的权限配置(代码配置方式优先级更高),支持基于配置文件的权限配置,支持基于代码的权限控制,支持基于注解的权限控制,设计简单...
本文将深入探讨一个名为“sysPower”的实用权限管理系统,它具备二级授权功能,能够灵活适应不同的数据库环境。 首先,我们要理解权限管理的基本概念。权限管理,简单来说,就是对用户或角色进行操作限制的一种机制...
本文将深入探讨如何在Spring Boot项目中利用Spring Security进行权限控制,并结合BCrypt加密技术来增强用户密码的安全性,同时也会提及如何使用Thymeleaf模板引擎来呈现动态安全的界面。 首先,我们需要理解Spring ...
总的来说,Java利用Mybatis进行数据权限控制是一种实用且灵活的解决方案,尤其适合已经使用Mybatis的项目。虽然存在一定的局限性,但在减少代码复杂性和提高权限控制灵活性方面,它提供了一种有效的途径。
在Apache中,权限控制是一个非常关键的安全特性,用于保护Web服务器上的资源,防止未经授权的访问。这个程序源码旨在帮助用户自定义和管理Apache的权限控制文件,以实现更加精细的访问控制。 在Apache中,权限控制...
5. **权限控制的层次**:在Windows系统中,权限控制通常基于用户账户控制(UAC)和NTFS文件系统权限。UAC使得普通用户账户不能执行管理员级别的操作,而NTFS权限则针对每个文件和文件夹设置具体权限。 6. **权限...