`
┿┅мīSS
  • 浏览: 95237 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

(转)使用位运算来实现权限管理

阅读更多
转载自:http://www.cnblogs.com/xiaosonl/archive/2009/06/17/1505312.html

常用的位运算主要有与(&), 或(|)和非(~), 比如:

1 & 0 = 0, 1 | 0 = 1, ~1 = 0

在设计权限时, 我们可以把权限操作转换为位运算来处理.

第一步, 先建立一个枚举表示所有的权限操作:

[Flags]
public enum Permissions{  
  Insert = 1,  
  Delete = 2, 
  Update = 4,  
  Query = 8
}

[Flags]表示该枚举可以支持位运算, 而枚举的每一项值, 我们用2的n次方来赋值, 这样表示成二进制时刚好是
1 = 0001,
2 = 0010,
4 = 0100,
8 = 1000
等, 每一位表示一种权限, 1表示有该权限, 0表示没有.

接下来是权限的运算:

1. 权限的加法, 使用或运算来实现. 我们知道, 0001 | 0100 = 0101, 这样就表示同时具有第一位和第三位的权限了, 枚举表示为:

Permissions per = Permissions.Insert | Permissions.Update
2. 权限的减法, 使用与运算+非运算来实现, 如上面要去掉Insert权限, 操作为:

Permissions per &= ~Permissions.Insert
即是 0101 & ~0001 = 0101 & 1110 = 0100

3. 权限的判断, 使用与运算, 当判断用一用户是否具有该操作权限时, 要把用户的的权限与操作权限进行与运算, 如果得到的结果仍是操作权限, 则表示用户具有该权限:

Permissions per = Permissions.Insert | Permissions.Update;
if(per & Permissions.Insert = Permissions.Insert)
{
    //有操作权限
}
比较过程为 0101 & 0001 = 0001, 0001的0位用与运算把其它位都置成0, 变成只比较1的这一位.
分享到:
评论
1 楼 用手踢球 2011-03-24  
沙发!沙发!

相关推荐

    bit-permission:位运算实现权限管理

    bit-permission位运算实现权限管理测试代码/** * 用户权限测试类 * * @author zhougaojun * @create 2018-06-08 下午8:03 **/public class TestPermission { public static void main(String[] args) { /** * 定义一...

    PHP巧妙利用位运算实现网站权限管理的方法

    首先我们先定义4个常量来设定四种权限: ===================================== ...A用户拥有ADD-UPD-SEL-DEL四个权限,用位或运算计算A的权限总值 $a_all=ADD|UPD|SEL|DEL;//$all=15 可以注意到这个值

    数据采集系统

    6.采用二进制运算实现权限控制,利用interceptor实现粗粒度控制以及重写struts2 标签实现细粒度权限控制.采用二位运算能够使得权限运算更加快捷,而且极大 降低 session存储量,有效利用服务器资源. .系统中通过 cxf ...

    Gin + GORM + Casbin + vue-element-admin 实现的权限管理系统(golang).zip

    中央处理单元 (CPU):作为计算机的大脑,负责执行指令、进行逻辑运算和数据处理。 内存:包括随机访问内存 (RAM) 和只读存储器 (ROM),用于临时或永久地存储程序和数据供CPU快速访问。 存储设备:如硬盘、固态...

    浪曦生产型ERP第二阶段源代码

    期间详细讲解了如何通过存储过程等相关技术实现MRP以及其他运算(CRP本系统讲解粗能力运算),另外,针对相对复杂的MRP运算,课程提供详细,形象,生动的MRP计算原理之后再进行编码讲解。 通过学习本阶段课程,将大大...

    基于数据库管理的数据采集系统的设计及实现.docx

    为进一步提升资料重复的利用率,缩减开发成本,便于测试系统优化配置,本文主要描述了以数据库的管理为基础下数据采集的系统设计与实现,主要包含着配置采集任务、各种传感器的名称及型号、运算公式及各项参数等各项...

    毕业设计:网络商店销售管理系统的设计与实现(源代码)

    一般管理员具有除添加管理员、删除管理员之外的其他权限。 系统主体采用B/ S(Browser/ Server ,浏览器/ 服务器) 结构,即采用目前分布式系统流行的3 层软件结构,即在传统的客户和服务器之间加入应用服务器...

    C#+SQLServer人事管理系统(适合初学者、毕业设计等)【完整】

    人事资料查询将人事档案的各个类别构成组合的查询条件进行查询操作,包括与运算和或运算,即必须同时满足和拥有此条件即满足两种,查询结果显示在表格中。人事资料统计包括统计条件和结果,选择按条件查询会显示各...

    JAVA课程设计可用,学生管理系统

    为了使系统在学院的管理中发挥更大的作用,实现工作过程的计算机化,提高工作效率和工作质量,现提出如下的系统开发目标: (1)系统应具有实用性、可靠性和适用性,同时注意到先进性。 (2)对各个数据库进行动态...

    锐达人力资源管理系统(B/S架构)

    主要模块有:组织架构管理、人事档案管理、人才库及人才测评管理、工资管理、保险福利管理、考勤管理、绩效考核管理、合同管理、培训管理、政策法规、员工自助管理、员工宿舍管理、权限管理以及系统后台管理等。...

    中易通用人事工资管理系统 v1.4.1.rar

    职员数据管理及查看权限、工资数据的管理与查看权限、计件工资数据查看与管理权限,可以控制每个工资项目级和每个数据字段是否可查看、可修改,通过增强权限设置可以实现部门独立化数据管理功能,提高企业数据的安全...

    RX ERP软件生产管理系统

    系统依据订单要求的时间、数量进行主生产计划运算,并依据主生产计划的结果进行材料需求计划运算,产生缺料表,指导企业原材料采购,同时依据主生产计划的结果进行请制单维护作业,把所需生产的成品自动转成加工单,...

    基于 .NET Core MVC 的权限管理系统,代码易读易懂、界面简洁美观.zip

    中央处理单元 (CPU):作为计算机的大脑,负责执行指令、进行逻辑运算和数据处理。 内存:包括随机访问内存 (RAM) 和只读存储器 (ROM),用于临时或永久地存储程序和数据供CPU快速访问。 存储设备:如硬盘、固态...

    携投基金系统源码+数据库表设计文档+数据库脚本

    本系统开发主要对象是基金公司面向基金管理者,实现管理者轻松管理基金,代替了复杂且千遍一律的运算,并且简化了基金公司的人员安排,本系统通过权限使得员工能够专一管理自己的模块,员工也可以随时修改自己的密码...

    精通sql结构化查询语句

    10.1.5 使用子查询创建视图 10.2 使用IN语句的子查询 10.2.1 简单的IN语句子查询 10.2.2 使用IN子查询实现集合交运算 lO.2.3 使用IN子查询实现集合差运算 10.3 使用EXISTS语句的子查询 10.3.1 简单的EXISTS语句子...

    asp在线考试系统(asp+access实现)

    由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一个。所有用SQL编写的程序都是可以移植的。SQL是PostgreSQL(和大多数其它关系型数据库)用做查询语言的语言。它是可以移植...

    住院管理信息系统数据库设计--需求分析.doc

    好的医院管理系统,不但可以方便管理人员实现医院的日常管理工作,更重要的是可以 提高医院治病救人的效率。 医院拥有大量的医护人员,大量的后勤人员,大量的药品和仪器,最重要的是拥有大 量的病人,且流动性大,...

    Java数据库编程宝典2

    9.6 使用UNION运算符合并查询 9.6.1 EXCEPT运算符 9.6.2 INTERSECT运算符 9.7 小结 第10章 构建一个客户/服务器应用程序 10.1 使用不同的数据库和驱动程序 10.1.1 扩展的DBManager类 10.2 使用Database...

Global site tag (gtag.js) - Google Analytics