php的角色权限控制数据库表设如何设计?是个怎样的大概思路

解决方案 »

  1.   

    另一种方法是参数表,适用于固定参数,只判断bool的例如
    用户    读     写     执行
    abc      Y      Y      Y
    cba      Y      N     N
    zzz       Y      Y     N那么
    abc=7(二进制 111)
    cba=1(二进制 001)
    zzz=3(二进制 011)例如论坛,权限都是固定的参数值,每个人区别只是 有/无 某个权限*要注意的参数是64位/32位的问题——避免溢出
      

  2.   

    我设计的一个acl模块有4张表,还有一张记录用户的表与其中一张关联//资源表
    acl_resource
    //角色表
    acl_role
    //权限表
    acl_weight
    //某角色对于某资源拥有何种权限表
    acl_control//用户信息表
    user资源表主要存储的是模块,比如拿bbs来说:板块1,板块2...并且记录此资源拥有多少种权限。
    角色表:里面存储各种角色:管理员,超级版主,版主,注册用户,访客...
    权限表:发帖、回帖、删帖、修改贴、移动帖子...
    控制表:记录x角色对于x资源有x权限。
    用户表:记录用户信息,同时记录其隶属的角色id。小技巧。记录权限信息时,可以用类似linux权限的方法。
    比如发帖权限值=1、删帖权限值=2、修改权限值=4、移动=8。
    假如资源a拥有删帖、移动贴的权限,记为:1+8=9。想反向求出9代表哪些权限可以使用5%权限值是否=权限值的方法。即9&1==1,就拥有发帖权限,9&2!=2没有删帖权限,9&4!=4没有修改权限,9&8==8有移动贴权限。这样就不用记录一个1,8的字符串了。存储方便,计算效率也高。但缺陷是不能超过你cpu的位数。
    32位的机器上,最多有32个值,64位机器最多有64个值。但一般来说这足够了。
      

  3.   

    和我说的原理基本相同的,都是位运算,1/2/4/8……分别是2的0/1/2/3……次方
    请参考php位运算章节补答你的问题
    当系统是32位时,如果你有33个权限设置,且最后一个是yes(二进制最高位=1),就会溢出
    所以32位要设置多于32个权限,不能直接用位运算,需要取巧方法……