`

权限管理

    博客分类:
  • 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、文章管理:模拟菜单

    基于ThinkPHP5开发的漂亮通用后台全权限管理系统

    又来分享一款基于最新thinkphp5开源框架5.0.13版本开发的通用后台权限管理系统,这是一款基于ThinkPHP5.0.13 + layui2.2.45 + ECharts +Mysql开发的后台管理框架,PHP版本要求提升到5.5。集成了一般应用所必须的基础...

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

    授权到窗口按钮的权限管理

    php权限管理系统

    根据权限管理系统流程图可得到系统功能呢如下: (1) 游客注册功能:游客可以通过注册成为会员,从而进入系统。 (2) 普通用户功能:在前台界面中,只要注册成功的普通用户就可以进行会员的相关操作。 (3) 管理...

    c#通用版权限管理系统

    主要功能有:权限管理、角色管理、部门管理、用户管理、公司管理、模块管理、系统设置。适用 OA、财务、人力等办公软件系统 的二次开发,以关键字(Key)的方式来定义系统的权限,使系统权限分配更加贴合企业需求。...

    Kinguser授权管理包.zip

    “Kinguser授权管理”是由Kingroot团队开发的一款安卓手机权限管理软件,具有root权限授权、软件权限管理两大功能。 与Superuser相比,“Kinguser授权管理”具备以下6大特色,更适合Android开发者及普通用户使用: 1...

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

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

    Winform通用框架之权限管理系统界面

    Winform通用框架之权限管理系统---------菜单,开发界面。 在csdn一篇博客中看到文章Winform通用框架之权限管理系统,但是只有文章没有源码就是耍流氓。于是自己写了出来,可用于所有管理系统的开发框架。 软件的...

    基于SpringBoot + MyBatis + Layui的后台权限管理系统.zip

    基于SpringBoot + MyBatis + Layui的后台权限管理系统。代码简洁易懂、界面美观大方,内部封装了权限管理系统常用的全部功能,可直接作为快速开发JavaWeb项目的脚手架使用。 基于SpringBoot + MyBatis + Layui的...

    PHP权限管理系统.zip

    PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理系统源码 PHP权限管理...

    基于SpringBoot+vue的前后端分离权限管理系统,界面美观,代码简洁易读。

    基于SpringBoot+vue的前后端分离权限管理系统,界面美观,代码简洁易读。 基于SpringBoot+vue的前后端分离权限管理系统,界面美观,代码简洁易读。 基于SpringBoot+vue的前后端分离权限管理系统,界面美观,代码...

    ASP.NET通用权限管理系统(FrameWork) 1.0.8源码版

    3)采用角色来进行权限的授权,每个用户可以属于多个角色,享有交差权限. 4)整合方便,权限检测采用httpmodule方式检测.基本不用对原有程序进行修改,便可将原有程序进行整合. 5)可视化编辑,全新的Menu和Tab控件.支持拖拉...

    通用权限管理系统+springboot+mybatis plus+spring security+jwt+redis+mysql

    通用权限管理系统可练手可毕设,如果项目中有权限开发要求可直接拿来基础开发。 系统设计包括前端Vue框架和后端SpringBoot框架的搭建,以及数据库和权限控制模块的设计。前端使用Vue框架进行页面开发,利用Vue ...

    权限管理数据库

    权限管理,是针对权限管理这个模块进行练习的,其中用的是struts1框架和jequery等,仅供与参考。

    基于springcloud+springboot+vue搭建的权限管理系统

    为了帮助企业方便快捷地管理商品信息的后台数据,开发了一个企业权限管理系统。该系统包括用户管理、角色管理、资源权限管理、基本数据管理模块;用户管理模块基于Spring Security的用户登录、退出操作,以及用户查询...

    ASP.NET权限管理系统(FrameWork) v1.0.5

    3)采用角色来进行权限的授权,每个用户可以属于多个角色,享有交差权限. 4)整合方便,权限检测采用httpmodule方式检测.基本不用对原有程序进行修改,便可将原有程序进行整合. 5)可视化编辑,全新的Menu和Tab控件.支持拖拉...

    权限管理权限管理

    权限管理权限管理

    ASP.NET权限管理系统(FrameWork)

    ASP.NET权限管理系统(FrameWork) 1.起源 在我们开发软件过程中,经常会需要开发一个后台管理程序.用于管理我们开发的前台软件. 当你开发的软件越来越多的时候,你的管理后台也会越来越多.这时如果有一个统一的管理...

    PermissionBase权限管理系统

    它包含了一个适用于一般企业应用系统的框架,以及与用户权限管理相关的结构和模块,因此PB可以作为中小型企业应用系统或一般网站系统的实现参考或者项目雏形。 PB包括以下模块:职员登录、模块导航、系统代码管理、...

    权限管理后台管理系统原型

    用户权限管理后台原型,包括用户管理、角色管理、权限管理等页面原型设计

Global site tag (gtag.js) - Google Analytics