比如这个权限付值:
perm |=(1l<<k);
perm已经是long,1也是long型,K如果大于60多,1l<<k 就会溢出,,,变成负的。
也就是说用位连计算权限,只能有60多个权限,
我的系统已经有40多个了,距60也不用了,不知到家是怎么处理的???

解决方案 »

  1.   

    perm |=(1<<k);如果perm 和1 都是long的话,系统可以有62个权限,
    如果perm 和1 都是int的话,系统可以有31个权限,
    如果权限个数大于62呢?该怎么做?
      

  2.   

    权限控制项目也太多了吧
    如果用位来限制权限,超过long型的,可以试试用多个long组合,自己控制位数,对多个long进行权限判断
    if (k>63) {
        perm1 |= (1l<<(k-63));
        perm2 |= (1l<<63);
    } else {
        perm1 = 0;
        perm2 |= (1l<<k);
    }
      

  3.   

    很多人喜爱把权限管理作为位域的应用,实际上这是一个不恰当的作法。权限系统一般由三部分组成:用户、角色、权限,映射成数据表的话有 5 张表:权限表
    角色表
    用户表
    角色权限表
    用户角色表更精细地还可以有用户权限表。若一定要用位域的话,可以看看 java.util.BitSet 这个类。
      

  4.   

    LZ的这个perm如果是来自数据库,那这样的设计数据库估计也要改了
    可以改为字符串,存时String s = String.format("%016X", perm1) + String.format("%016X", perm2);
    取时再把字符串按16位拆分为多个long型的16进制字符串,然后转为相应的long