最近在做权限管理,突然想到了曾经指导过我的技术总监用过的一种办法,今天我也这样弄一下,下午遇到了点问题,但看了这个文章基本上就能解决了.
我的代码例子:
/**
* 验证是用户是否拥有该权限
* @param limit 用户权限
* @param action 模块权限
* @return true有权限,false没有权限
*/
public static boolean limit(int limit,int action){
return (limit&action)!=0;
}
/**
* 移除权限
* @param limit
* @param action
*/
public static void limitRemove(int limit,int action){
System.out.println(limit&~action);
}
希望能给志同道合的人带来帮助!
以下是C#的做法,Java同样适用的!
C#中使用位运算来实现权限管理2009-08-12 11:27摘要:本文向您讲解使用C#位运算来实现权限管理,在设计权限时, 把权限管理操作转换为C#位运算来处理。
标签:C#位运算 权限管理
常用的位运算主要有与(&), 或(|)和非(~), 比如:
1 & 0 = 0, 1 | 0 = 1, ~1 = 0
在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理.
第一步, 先建立一个枚举表示所有的权限管理操作:
/// 测试代码
[Flags]
public enum Permissions
{
Insert = 1,
Delete = 2,
Update = 4,
Query = 8
}
[Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用2的n次方来赋值, 这样表示成二进制时刚好是1 = 0001, 2 = 0010, 4 = 0100, 8 = 1000等, 每一位表示一种权限, 1表示有该权限, 0表示没有.
接下来是权限的运算:
1. 权限的加法, 使用与运算来实现. 我们知道, 0001 | 0100 = 0101, 这样就表示同时具有第一位和第三位的权限管理了, 枚举表示为:
Permissions permissions = Permissions.Insert | Permissions.Update
2. 权限的减法, 使用与运算+非运算来实现, 如上面要去掉Insert权限, 操作为:
Permissions permissions &= ~Permissions.Insert即是 0101 & ~0001 = 0101 & 1110 = 0100
3. 权限的判断, 使用与运算, 当判断用一用户是否具有该操作权限时, 要把用户的的权限与操作权限进行与运算, 如果得到的结果仍是操作权限管理, 则表示用户具有该权限:
Permissions permissions = Permissions.Insert | Permissions.Update;
Assert.IsTrue((permissions & Permissions.Insert) == Permissions.Insert);
Assert.IsTrue((permissions & Permissions.Update) == Permissions.Update);
Assert.IsFalse((permissions & Permissions.Query) == Permissions.Query);
permissions &= ~Permissions.Delete;
Assert.IsFalse((permissions &= ~Permissions.Delete) == Permissions.Delete);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/windcoldice/archive/2010/03/23/5406918.aspx
分享到:
相关推荐
在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第一步, 先建立一个枚举表示所有的权限管理操作: 代码如下:[Flags] public enum Permissions { Insert = 1, Delete = 2, Update = 4, Query = 8 } ...
除了上述基础的权限检查,还可以进一步扩展这种位运算的权限管理系统。例如,可以添加更多的权限常量,用更复杂的位运算组合来实现多级权限控制。同时,也可以使用位运算的其他操作,如位异或(^)和位非(~),来...
本文将深入探讨C#枚举中的位运算,包括其基本概念、操作方法以及如何应用于权限管理。 首先,要理解位运算,它是计算机底层处理数据的基本方式,涉及到对二进制位的操作。常见的位运算有与(&)、或(|)、非(~)...
本项目是博文《【TypeScript 学习】TypeScript 枚举类型发散:基于位运算的权限管理 CRUD 操作》的配套完整示例代码。内含详细操作说明,并附本地实测截图,按文档操作可以直接显示测试用例输出结果。 本项目最大...
下面我们将深入探讨如何利用位运算来实现权限管理。 首先,我们需要了解JavaScript中的基本位运算符: 1. **与运算符("&")**:两个数进行逐位与运算,只有当对应的二进制位都是1时,结果位才为1,否则为0。例如...
本文将深入探讨“基于位运算的权限细粒度控制”这一主题,结合给定的标签“源码”和“工具”,我们将探讨如何通过位运算实现高效、灵活的权限管理。 位运算是一种在计算机科学中处理二进制数据的基本操作,包括按位...
这种方式简化了权限的管理,因为可以通过位运算直接进行权限的合并、去除和检测。 权限操作主要包含三个部分:赋予权限、禁止权限和检测权限。赋予权限通常使用位或运算符,它将权限值合并到一个总的权限变量中。...
bit-permission位运算实现权限管理测试代码/** * 用户权限测试类 * * @author zhougaojun * @create 2018-06-08 下午8:03 **/public class TestPermission { public static void main(String[] args) { /** * 定义一...
二进制位运算是一种高效且灵活的方法,尤其适用于权限管理这种需要组合不同权限的情况。 首先,我们需要了解二进制位运算的基本概念。在计算机中,数据以二进制形式存储,每个位(bit)可以是0或1。位运算符包括按...
- 在处理文件权限时,比如Unix系统中的文件权限,我们可以用位运算来设置读、写、执行等权限。 - 在网络编程中,IP地址和端口号的处理经常用到位运算。 - 在内存管理中,位图常用于表示和操作大量资源的状态,如...
4. **状态管理**:通过位运算可以轻松管理多个标志位的状态,比如权限控制、功能开关等。 综上所述,位运算在计算机科学中扮演着重要的角色,特别是在那些对性能要求极高的场景中。理解并掌握位运算的基本原理及...
总结来说,"经典权限管理问题"是一个关于如何利用计算机的二进制计算优势来提升权限管理系统性能的主题,它可能涉及到C#中的位运算和枚举特性,以及如何构建和操作位掩码来实现高效、灵活的权限控制。通过深入理解和...
在用户权限管理中,位运算被广泛应用于权限的设置与检查。通过位运算符,每个权限都可以对应到一个特定的二进制位,从而通过简单的位运算即可快速判断某个权限是否被赋予给特定用户。 举个例子,我们可以定义一些...
可以使用位AND运算来检查特定权限是否存在:`If (权限码 AND (1 )) = 0 Then`,这里的`(1 )`是左移运算,相当于将1移动n位,用于设置或检查特定位置的位。 幂运算在权限系统中也起着关键作用。在VB中,`^`符号用于...
该算法基于二进制位运算来实现权限管理。通过为不同的操作赋予不同的数值(通常是2的幂次方),可以灵活地组合出各种权限。具体来说: - **权限值定义**:每个操作被赋予一个2的幂次方值,如查看操作被赋值为1(2^0...
总之,这个C#的.NET权限管理系统Demo是一个学习权限控制和位运算的宝贵资源。它展示了如何通过角色分配权限,以及如何使用按位运算符有效地检查和修改用户权限,这对于构建安全、高效的企业级应用至关重要。
在IT行业中,数据库查询效率是优化系统性能的关键因素之一。在处理多选查询时,传统的...同时,这种技术在权限管理、状态过滤等场景中也有广泛的应用。了解并熟练运用位运算,不仅能优化代码,还能提升系统整体的性能。