zoukankan      html  css  js  c++  java
  • 数据库权限优化,权限设计BigInteger

       最近看到了一个项目的权限是根据bigineger来进行计算的菜单权限,觉得还是不错,存储上只需要存储在一个字段里就可以了,通过计算算出该角色的菜单权限即可,效率也非常的快,放在session中也非常的小,下面简单说一下思路。

            首先,将界面中选好的菜单树,勾选完成后传到后台,后台通过转成字符串数组来进行设值

           

    [java] view plain copy
    1. public static BigInteger sumRights(String[] rights){  
    2.         BigInteger num = new BigInteger("0");  
    3.         for(int i=0; i<rights.length; i++){  
    4.             num = num.setBit(Integer.parseInt(rights[i]));  
    5.         }  
    6.         return num;  
    7.     }  
    通过上面方法,返回一个BigInteger,然后将这个数字存入所属角色的菜单权限字段中。注意的是:这里的菜单ID必须是数字,String[] rights为所选菜单的数组,通过setbit方法一一设置进num中。


    其奖,再获取权限的时候,也一样,通过把之前存入的菜单权限的biginteger和菜单ID做对比来判断是否具有该菜单权限

    [java] view plain copy
    1. public static boolean testRights(BigInteger sum,int targetRights){  
    2.         return sum.testBit(targetRights);  
    3.     }  

    sum为对应角色的菜单权限值,targetRights为具体菜单ID,通过biginteger的testBit方法来判断是否存在里面,如果存在就返回true,不存在就返回false.

    biginteger通过set的值,其实是2的权的和。下面有一个列子:

    [java] view plain copy
    1. package com.hundsun.network.post.settle.job;  
    2.   
    3. import java.math.BigInteger;  
    4.   
    5. public class TestBigInteger {  
    6.   
    7.     public static void main(String[] args) {  
    8.         //初始  
    9.         BigInteger num = new BigInteger("0");  
    10.         num = num.setBit(2);  
    11.         num = num.setBit(1);  
    12.         System.out.println(num);  
    13.         System.out.println(num.testBit(2));  
    14.         System.out.println(num.testBit(1));  
    15.         System.out.println(num.testBit(3));  
    16.     }  
    17.   
    18. }  
    num的值为6,是这样计算的2^2+1^2=6。

    通过这种方式,不管是解析和查询其实效率都是很高的,占用session的空间也非常的小,不为是一个好的权限设计思路。

    原文地址:https://blog.csdn.net/qq_39654446/article/details/78197688
  • 相关阅读:
    JS实现动态生成表格并提交表格数据向后端 表格中数据转为json
    JS 添加和删除HTML 标签
    操作系统杂碎
    bootstrap3级下拉菜单 及 CSS实现三级下拉菜单分析
    jquery获取复选框被选中的值
    Mac 命令行启动并连接Redis
    抓包工具不抓包的话记得看看还有没有没关的代理
    Mac OS Sierra 安装PHP扩展 Operation not permitted
    导航栏对于UIScrollview以及子类所做的一些事
    探索static的用处
  • 原文地址:https://www.cnblogs.com/jpfss/p/12055557.html
Copyright © 2011-2022 走看看