zoukankan      html  css  js  c++  java
  • mssql sqlserver SQL 位运算举例权限应用

    摘要:
    下文通过举例的方式讲述sqlserver中位运算的相关知识,如下所示:
    实验环境:sqlserver 2008 R2


    在sqlserver的权限设置,我们通常使用1、2、4、8、16、32、64、128等数值分别表示相关信息的某一状态供业务状态使用,通过字段值之间的组合形成一个状态值存储到数据库中,
    设置一个角色拥有的权限
    例:
    1:代表“查看”按钮权限
    2:代表"修改"按钮
    4:代表"导出"按钮
    8:代表"删除"按钮
    ...

    --例:
    --权限表如下:
    create table userRole(userId varchar(36),
    roleInfo int);
    go
    
    insert into userRole(userId,roleInfo)values('test',1) ---初始化测试账号"test",拥有查看权限
    insert into userRole(userId,roleInfo)values('猫猫',2) 
    --当我们需要给用户加入修改"2"权限,则可以使用以下运算
    update userRole set roleInfo =roleInfo|2 where userId ='test'
    
    
    --当我们需要给用户加入导出"4"权限,则可以继续使用以下运算
    update userRole set roleInfo =roleInfo|4 where userId ='test'
    
    
    --当我们需要给用户删除导出"4"权限,则可以继续使用以下运算
    --删除权限前需判断用户是否存在此权限,此脚本不可多次运行
    --if exists (select null from userRole where roleInfo &4 =4 and userId ='test')
    ---begin
    update userRole set roleInfo =roleInfo^4 where userId ='test' and roleInfo&4 =4 
    --end
    ---我们检索所有拥有权限"修改2"的用户信息
    select * from userRole where roleInfo &2 = 2
    
    go
    truncate table userRole
    drop table userRole

    注意事项:
    此处权限设置,主要使用二进制中每一位代表一个权限及位运算的特性进行权限的增减操作
    由于"^异或运算"运算,左表达式1或0 时 右表达式为1时,将分别产生 0、1,所以剔除权限时,一定要判断是否存在此权限
     转自:http://www.maomao365.com/?p=7137

  • 相关阅读:
    Android编译系统
    Android指针管理:RefBase,SP,WP
    Android图片异步加载
    Android动画学习笔记Android Animation
    触发checkbox的click事件时遇到的问题
    C++ Primer笔记
    Android自定义对话框(Dialog)位置,大小
    android startService流程梳理笔记
    自定义SimpleAdapter
    Android Touch事件
  • 原文地址:https://www.cnblogs.com/lairui1232000/p/9482549.html
Copyright © 2011-2022 走看看