zoukankan      html  css  js  c++  java
  • sql 与运算

    当我们为某个员工设置权限时,发现员工可以属于很多个部门,于是这个员工拥有的权限也将很多。
    这时,我们可以考虑用与运算来出来权限的问题。
    假定有很多模块,每个模块允许设置使用权限。
    模块X1使用权限为权限1,
    模块X2使用权限为权限4,
    假定统计得出一共存在10个权限。
    那么我们设定第一个权限值为1,第二个权限值为2,第三个权限值为4,等等根据二进制的原理进行设置。
    如果用户A拥有权限1,权限3,那么他的权限值为5.根据以上原理,模块1的权限值为1,模块2的权限值为8。
    那么我们可以使用以下查询语句来检索该用户能够使用的模块。
    declare @userrole int
    set @userrole = 5
    select modulename from t1
    where (modulerole &  @userrole) > 0

    原理:modulerole &  @userrole使用了位运算,modulerole 和  @userrole值换算成二进制,然后相同的位置的二进制值进行与运算。如果运算结果没有一个匹配的话返回值将是零。

    用户A的权限二进制值:0101
    模块X1:0001
    模块X2:1000

    用户               模块X1                    模块X2
    用户A             0001                        0000

    通过以上原理编写权限值可以节省很多代码和处理时间。
  • 相关阅读:
    Java:类加载器(ClassLoader)
    Java 并发:Executor
    Java 并发:线程中断-interrupt
    UNIX IPC: POSIX 消息队列 与 信号
    Java与C++区别:重载(Overloading)
    UNIX IPC: POSIX 消息队列
    PAT 1078. Hashing
    PAT 1032. Sharing
    回顾经典问题算法:LIS, LCS-(DP类别)
    url编码模块
  • 原文地址:https://www.cnblogs.com/si812cn/p/1216164.html
Copyright © 2011-2022 走看看