为了方便起见,我们这里定义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;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!
分享到:
相关推荐
在Spring MVC框架中,权限验证是构建安全Web应用程序的关键部分。Spring MVC提供了多种方式来实现权限验证,确保只有授权的用户能够访问特定的资源或执行特定的操作。下面将详细讲解Spring MVC权限验证的相关知识点...
在IT行业中,权限验证是构建安全、可控的Web应用程序的关键环节。ThinkPHP是一个流行的PHP框架,它提供了强大的功能,使得开发者能够快速、高效地开发出符合业务需求的应用。在这个基于ThinkPHP的“auth权限验证”...
在本“aop 权限验证demo”中,我们将深入探讨如何利用AOP技术进行权限验证。 首先,AOP的核心概念是切面(Aspect),它封装了横切关注点,即那些跨越多个对象和模块的代码,如日志、事务管理和权限控制等。在Java...
在本文中,我们将深入探讨`goAuth_goweb权限验证`这一主题,它是一个使用Go语言实现的Web应用程序权限验证框架。Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译型的、并发的、垃圾回收的、具有C风格...
在本文中,我们将深入探讨如何在Apache CXF框架中实现客户端和服务器端的权限验证。Apache CXF是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和服务级应用程序。它支持多种Web服务标准,包括SOAP、...
本文将深入探讨Java中的访问权限验证,包括其概念、种类以及如何在实践中应用。 **一、访问权限概述** Java提供了四种不同的访问级别,它们决定了类、方法和字段对外界的可见性: 1. **public**:公共访问权限,...
MVC WebApi 用户权限验证及授权DEMO 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及...
在本文中,我们将重点探讨如何使用Spring AOP实现用户权限验证。 首先,权限验证是任何应用程序中不可或缺的一部分,尤其是涉及到用户登录和访问控制的场景。通过Spring AOP,我们可以将权限验证的逻辑与业务代码...
用户登录是指用户通过提供有效的身份凭证(如用户名和密码、手机号码和验证码等)来验证自己的身份,并获得对特定系统、应用程序或网站的访问权限。用户登录是保护用户隐私和数据安全的重要措施,同时也为用户提供...
"一般处理程序验证是权限"这个标题强调了在使用ASHX文件时,对用户访问权限的控制是至关重要的。 一般处理程序(.ashx)的验证过程主要涉及以下几个方面: 1. **身份验证**:这是确保只有经过授权的用户可以访问...
在IT行业中,权限验证是构建安全应用程序的关键环节。C#作为一种强大的编程语言,提供了丰富的工具和框架来实现这一目标。本资源"**C# 权限验证的开源代码.zip**"可能包含了一个用于C#环境下的权限验证解决方案,...
tomcat配置ldap权限验证 Tomcat配置LDAP权限验证是指通过LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)协议来实现用户身份验证和权限控制的过程。下面是具体的配置步骤和知识点解释: 1....
总之,FormsAuthentication是ASP.NET中实现Web应用身份验证的关键组件,而权限验证则确保了只有具备适当权限的用户才能访问特定资源。通过理解并熟练掌握这两个概念,开发者可以构建出安全、可控的Web应用程序。
Symfony 工作流中的权限验证 Symfony 是一个流行的 PHP 框架,用于构建复杂的 Web 应用程序。在 Symfony 中,工作流是一个非常重要的概念,它允许开发者定义复杂的业务逻辑流程。在工作流中,权限验证是一个非常...
SpringBoot+SpringSecurity+JWT+MybatisPlus实现基于注解的权限验证,可根据注解的格式不同,做到角色权限控制,角色加资源权限控制等,粒度比较细化。 @PreAuthorize("hasAnyRole('ADMIN','USER')"):具有admin或...
微信JSSDK权限验证demo,Servlet实现,方便大家理解。---------
### 用户登录权限、密码验证方案 #### 一、概述 用户登录权限与密码验证机制是保障应用程序安全性的重要组成部分。在现代软件开发中,确保只有经过身份验证的用户才能访问特定资源至关重要。本文档将深入探讨...
在标题提及的场景中,“在ashx中验证是否登陆、是否有操作权限的基类”是一个设计模式,旨在提高代码的复用性和安全性,使得每个具体的ASHX处理程序无需重复编写用户身份验证和权限检查的逻辑。 首先,让我们理解...
在"struts2登录权限验证(带数据库)"这个主题中,我们将深入探讨如何使用Struts2实现用户登录功能,并结合数据库进行权限验证。这个简单例子展示了如何将用户角色与权限管理集成到系统中。 首先,我们需要建立一个...