`

权限管理

    博客分类:
  • java
阅读更多

                                                               绝妙的权限控制算法

对原文作者说声对不住啊,不知道是那个高人的想法,现在发出来,和大家一起分享,好帖,不要沉了!

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

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

分享到:
评论
2 楼 fighterhou 2011-02-23  
之前用过一长串二进制值来控制权限,不过得写一个对应表,还是这篇文章的方法 简单
1 楼 huiwenshu 2011-02-23  
心情不好,现在回个帖都难,不过这篇文章确实不错

相关推荐

    PHP权限管理系统源码

    1、角色管理:添加角色、编辑角色、删除角色、角色授权 2、权限管理:添加权限、编辑权限、删除权限、 3、用户管理:添加用户、编辑用户、删除用户 4、日志管理:登录日志 5、文章管理:模拟菜单

    权限管理系统,或者资源授权管理中心,或者权限控制中台

    权限管理系统,或者资源授权管理中心,或者权限控制中台。资源空间(相当于应用系统)。资源组(相当于频道、模块)。资源可见(相当于菜单),可不见(相当于权限码)。主体组可见(相当于企业、机构、部门),不...

    授权到窗口按钮的权限管理.rar_c#权限管理_授权_授权管理_权限_权限管理

    本文将深入探讨C#中的权限管理系统,包括授权、授权管理以及权限控制的相关概念和实践方法。 首先,我们要理解“权限”这一核心概念。在软件系统中,权限通常指的是用户或角色对系统资源(如文件、功能、窗口按钮等...

    java权限管理系统

    通过这个简单的Java权限管理系统项目,初学者可以了解到如何整合前后端,实现用户认证与授权,同时掌握数据库设计和SQL操作。此外,还能学习到Spring Security等框架的使用,提升对安全编程的理解。对于未来从事企业...

    后台权限管理系统

    后台权限管理系统是企业信息化建设中的重要组成部分,它主要用于管理和控制不同用户在系统后台的操作权限。在这样的系统中,角色、菜单和按钮权限控制是核心功能,确保了系统的安全性和操作的准确性。 首先,我们来...

    ASP.NET通用权限管理系统源代码(含文档、数据库)

    ASP.NET通用权限管理系统源代码(含文档、数据库) 1.菜单导航管理 2.操作按钮 3.角色管理 4.部门管理 5.用户管理(用户权限) 6.用户组管理(设置成员,用户组权限) 7.系统配置(动态配置系统参数) 8.附加属性...

    c#权限管理系统.zip

    描述中的“权限管理系统”通常涉及到用户身份验证、授权、角色管理和访问控制等多个方面。在C#中,我们可以利用ASP.NET Identity或自定义的身份验证服务来实现用户登录和验证。ASP.NET Identity提供了一套完整的身份...

    java权限管理代码

    权限管理的核心概念主要包括身份验证(Authentication)、授权(Authorization)和会话管理(Session Management)。以下是对这些概念的详细解释: 1. 身份验证:这是验证用户身份的过程,通常通过用户名和密码组合...

    C# MVC 权限管理源码

    【C# MVC 权限管理源码】是一个用于构建企业级应用的重要组件,它涉及到用户、角色和权限的管理,是系统安全的核心部分。在基于ASP.NET MVC框架的开发中,这种权限管理系统可以帮助开发者实现对用户访问控制的精细化...

    Flyme授权管理.rar

    Flyme授权管理是一款专为魅族手机用户设计的系统应用,它主要负责管理手机上的权限分配,确保各个应用程序能够正常运行并保护用户的隐私安全。在Android操作系统的基础上,Flyme系统进行了深度定制,其中 Flyme 授权...

    权限管理视频

    在IT领域,权限管理是一项至关重要的任务,尤其在企业级应用和系统中,它涉及到数据安全、用户访问控制以及合规性。"权限管理视频"很可能包含了一系列教程或讲解,旨在帮助用户理解和实施有效的权限管理系统。下面,...

    winform权限管理系统框架

    首先,权限管理是任何复杂应用程序的基础,它确保用户只能访问他们被授权的数据和功能。在Winform权限管理系统框架中,这一概念通过角色(Role)、用户(User)和权限(Permission)的概念来体现。角色是权限的集合...

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

    在IT行业中,权限管理系统是软件应用中的重要组成部分,它用于控制不同用户对系统资源的访问。本项目"用户权限管理模块(C++实现)"是一个用C++编程语言实现的权限管理解决方案,它包含了几个核心功能,如单例模式、...

    Greenplum数据库权限管理1

    它允许管理员精确地控制不同用户和角色对数据库对象的访问权限,从而防止未经授权的数据访问或修改。 1.1 概述 Greenplum的权限系统遵循PostgreSQL的模型,允许管理员为不同的用户或角色定义权限级别。权限分为多种...

    Springboot + shiro权限管理

    在现代企业级应用开发中,权限管理是不可或缺的一部分,它确保用户只能访问他们被授权的资源。SpringBoot 和 Apache Shiro 是两个非常流行的 Java 开发框架,它们结合可以构建出高效且安全的权限管理系统。本篇文章...

    基于 Vue 的前端权限管理.pdf

    在现代Web应用程序中,权限管理是一个重要组成部分,它确保只有经过授权的用户才能访问特定的资源或执行特定的操作。本文将详细探讨基于Vue前端权限管理的知识点。 首先,Vue.js是一种构建用户界面的渐进式框架,它...

    手机授权管理-Root手机后权限管理利器.docx

    授权管理程序,如文中提到的"授权管理-Root手机后权限管理利器",是专门为Root后的Android设备设计的工具,用于管理和控制各个应用程序对Root权限的访问。这些工具通常具有以下关键功能: 1. **授予和管理ROOT权限*...

    OA权限管理设计.doc

    在构建企业信息系统,尤其是办公自动化(OA)系统时,权限管理设计是不可或缺的重要组成部分。权限管理的核心目标是确保系统安全,提升操作效率,并提供灵活的角色分配机制。以下是对OA权限管理设计的详细说明: 1....

    手机授权管理-Root手机后权限管理利器.pdf

    "授权管理"就是在Root后对这些高级权限进行管理的重要工具。 "授权管理-Root手机后权限管理利器"是一款专为已经Root的Android设备设计的应用,由刷机大师团队开发。它提供了全中文界面,使得普通用户也能轻松理解和...

    权限管理系统

    在信息化社会,数据和信息的安全性至关重要,权限管理作为其中的关键环节,它确保只有授权的用户才能访问特定的资源,从而保护组织的核心资产。本文将深入探讨权限管理系统的概念、功能、设计原则以及常见实现技术。...

Global site tag (gtag.js) - Google Analytics