`
┿┅мīSS
  • 浏览: 96014 次
  • 性别: 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  
沙发!沙发!

相关推荐

    JS通过位运算实现权限加解密

    下面我们将深入探讨如何利用位运算来实现权限管理。 首先,我们需要了解JavaScript中的基本位运算符: 1. **与运算符("&")**:两个数进行逐位与运算,只有当对应的二进制位都是1时,结果位才为1,否则为0。例如...

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

    总结来说,PHP通过位运算实现的权限管理方法具有高效、灵活和可扩展的特点。这种技术不仅简化了权限系统的实现,还能够适应不断变化的需求,是网站权限管理中的一个实用工具。通过理解位运算的基本原理,并结合PHP...

    浅析关于PHP位运算的简单权限设计

    在PHP中实现权限控制的类时,可以通过定义一个静态的计数器,每次创建权限类实例时,计数器递增,然后使用左移操作符来计算当前权限值。由于权限值是基于2的幂的,所以每次左移相当于2的N次幂,保证了权限值的唯一性...

    TS枚举类型拓展:在权限管理中实现基于位运算的CRUD操作.rar

    本项目是博文《【TypeScript 学习】TypeScript 枚举类型发散:基于位运算的权限管理 CRUD 操作》的配套完整示例代码。内含详细操作说明,并附本地实测截图,按文档操作可以直接显示测试用例输出结果。 本项目最大...

    基于位运算的权限细粒度控制

    本文将深入探讨“基于位运算的权限细粒度控制”这一主题,结合给定的标签“源码”和“工具”,我们将探讨如何通过位运算实现高效、灵活的权限管理。 位运算是一种在计算机科学中处理二进制数据的基本操作,包括按位...

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

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

    经典权限管理问题

    总结来说,"经典权限管理问题"是一个关于如何利用计算机的二进制计算优势来提升权限管理系统性能的主题,它可能涉及到C#中的位运算和枚举特性,以及如何构建和操作位掩码来实现高效、灵活的权限控制。通过深入理解和...

    .net 运用二进制位运算进行数据库权限管理

    总结来说,.NET中利用二进制位运算进行数据库权限管理的优势在于: 1. **效率高**:位运算在计算机底层直接处理,速度非常快。 2. **灵活性强**:可以轻松地组合和检查多种权限。 3. **节省空间**:通过单一的整数值...

    vb 转二进制串并运算判断第几位为0

    本文将深入探讨如何将数字转换为二进制串,并进行运算以判断特定位置的数字是否为0,以及如何利用这种技术实现灵活的权限管理。 首先,让我们了解二进制。二进制是计算机科学中的基础,它只使用0和1两个数字表示...

    经典权限管理算法

    该算法基于二进制位运算来实现权限管理。通过为不同的操作赋予不同的数值(通常是2的幂次方),可以灵活地组合出各种权限。具体来说: - **权限值定义**:每个操作被赋予一个2的幂次方值,如查看操作被赋值为1(2^0...

    通用的权限管理,java语言描述,其实都差不多的。

    通过以上介绍,我们可以看到使用位运算来实现权限管理是一种简单且高效的方案。它不仅可以清晰地表示每个权限,还能够方便地进行权限的组合和拆分。在实际开发中,根据项目需求选择合适的权限管理模式非常重要,这有...

    角色权限管理

    通过研究这个类,初学者可以更好地理解如何在C#中实现权限管理。 总之,这个C#的.NET权限管理系统Demo是一个学习权限控制和位运算的宝贵资源。它展示了如何通过角色分配权限,以及如何使用按位运算符有效地检查和...

    基于SSM的企业权限管理系统

    在本项目中,Spring Security被用来实现权限控制,确保只有拥有特定权限的用户才能访问特定的资源。通过配置,Spring Security可以实现认证(Authentication)和授权(Authorization),对用户的登录、权限分配、...

    通用的权限管理系统的设计.doc

    - 位运算:通过位运算实现权限的组合,例如,使用二进制位表示权限,通过逻辑运算快速判断用户是否具备某组合权限。 通用的权限管理系统设计的关键在于其结构的稳定性和适应性。无论是在大型企业级应用还是小型项目...

    二进制的基础上的位运算

    4. **状态管理**:通过位运算可以轻松管理多个标志位的状态,比如权限控制、功能开关等。 综上所述,位运算在计算机科学中扮演着重要的角色,特别是在那些对性能要求极高的场景中。理解并掌握位运算的基本原理及...

    spring aop实现用户权限管理的示例

    对于只读管理员权限的实现,可以使用 execution 表达式逻辑运算来实现权限管理。同时,需要规范的方法命名以便于后期维护。 知识点五:Spring AOP 配置文件配置方法 在 Spring AOP 中,可以使用 <bean> 和 ...

    C#枚举中的位运算权限分配浅谈

    在特定场景下,如权限管理,我们可以利用枚举结合位运算来实现高效且灵活的权限控制。本文将深入探讨如何使用位运算在C#枚举中进行权限分配。 首先,我们需要创建一个枚举来表示所有可能的权限管理操作。在C#中,...

    java权限管理.pdf

    综上所述,Java权限管理是一个复杂而关键的系统组件,通过RBAC模型和ACL的结合,实现了对用户操作的精确控制,确保了系统的安全性和合规性。在实际应用中,开发者需要根据业务需求进行定制化设计,以满足各种复杂的...

Global site tag (gtag.js) - Google Analytics