什么是位运算

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

  &  = ;
| = ;
~ = ;
运用在权限设计中

  先建立一个枚举表示所有的权限管理操作:

   [Flags]
  public enum Permissions
  {
  Insert = ,
  Delete = ,
  Update = ,
  Query =
  }

  [Flags]表示该枚举可以支持C#位运算。

  枚举的每一项值, 我们用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
// 即是
& ~ = & =

  3. 权限的判断, 使用与运算。

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

   Permissions per = Permissions.Insert | Permissions.Update;
  if(per & PermissionsPermissions.Insert = Permissions.Insert)
  {
  //有操作权限
  }

  比较过程为 0101 & 0001 = 0001, 0001的0位用与C#位运算把其它位都置成0, 变成只比较1的这一位.

总结

  我们总共讲了3种操作方式:

  赋与权限、去除权限、判断是包含权限。这样我们的一个权限设计就基本满足了。实际上在MSSQL这些关系数据库中也是支持位运算的。

  有时候,比如订单表,需要状态非常多,如果某个状态的设计是流水状态下来的。就可以用“位”来设计这种状态保存方式。并且由于数据库是支持位运算的,所以我们也可以很容易在查询结果时,直接筛选数据。

最新文章

  1. AI人工智能系列随笔:syntaxnet 初探(1)
  2. ios动态创建类Class
  3. 搭建Apache Web服务器
  4. winform快速开发平台 -> 基础组件之分页控件
  5. 如何通过cmd检查自己电脑是否安装了oracle
  6. isee - 创建项目 - 1
  7. 【BZOJ-3156】防御准备 DP + 斜率优化
  8. zzulioj 1907小火山的宝藏交易(dfs记忆化搜索)
  9. hdu2222 AC自动机
  10. html5 filereader读取流注意事项
  11. 4 bytes (32 bits) or 8 bytes (64 bits)
  12. [转载]EF Code First 学习笔记:约定配置
  13. UI基础视图----UIWebView总结
  14. virtualBox使用nat模式下ssh连接
  15. 关于 ElesticSearch 安装
  16. gogogo
  17. GROUP BY 和 ORDER BY一起使用时的注意点
  18. Typora + Mathpix Snip,相见恨晚的神器
  19. DevOps实践之一:基于Docker构建企业Jenkins CI平台
  20. oracle 定期迁移分区表数据(不落地)

热门文章

  1. Lightoj 1002 - Country Roads(prim算法)
  2. 还在为AndroidStudio的Gradle版本配置头疼?看看老司机的解决方法吧
  3. Persisting Data to the Device
  4. Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)——无非是在传统遍历过程中修改叶子结点加入后继结点信息(传统是stack记录),然后再删除恢复
  5. 小程序-demo:template
  6. 377D
  7. Html.PartialView(),html.Renderpartial,html.action.html.RenderAction 辅助方法
  8. bzoj 2525: [Poi2011]Dynamite【二分+树上贪心】
  9. 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond【spfa】
  10. jrebel永久免费使用教程,这个标题怎么样?不能带“激活”俩字?