首页 > 其他 > 详细

权限 位运算

时间:2021-05-17 15:33:23      阅读:26      评论:0      收藏:0      [点我收藏+]

  当权限个数比较少时,可以使用位运算来记录用户的权限

  数据库中权限需要有一列唯一值为2的次方

  例如:

//定于权限 2的n次方
var ADD = 1; // 增加权限
var UPD = 2; // 修改权限
var SEL = 4; // 查找权限
var DEL = 8; // 删除权限

// 给予某种权限用到"位或"运算符
var GROUP_A = ADD | UPD | SEL | DEL; // A 拥有增删改查权限
var GROUP_B = ADD | UPD | SEL; // B 拥有增改查权限
var GROUP_C = ADD | UPD; // C 拥有增改权限

// 禁止某种权限用"位与"和"位非"运算符
$GROUP_D = GROUP_C & ~UPD; // D 只拥有了增权限

当人员拥有增加和查找权限时,人员权限可存值为5(1+4)

人员权限拆解

 #region 根据type值返回所拥有的角色
        /// <summary>
        /// 根据位运算权限值返回所拥有的角色的权限
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
         [HttpGet]
        public async Task<ArrayList> GetBitList(int value)
        {
            //var list = new List<bool>(32);
            var list = await db.JC_ROLE.ToListAsync();
            ArrayList rolelist = new ArrayList();
            for (var i = 0; i < list.Count; i++)
            {
                var val = 1 << i;
                // list.Add((value & val) == val);
                if ((value & val) == val)
                {
                    int sum = (int)Math.Pow(2, i);
                    rolelist.Add(sum);
                }
            }
            return rolelist;
        }
        #endregion

参数value 值为5, 输出结果为1,4

 

权限 位运算

原文:https://www.cnblogs.com/changa/p/14776331.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!