当权限个数比较少时,可以使用位运算来记录用户的权限
数据库中权限需要有一列唯一值为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