权限设计可是个课题呀。
我现在做系统开发使用的权限设计是:角色表只存一条权限记录,各个权限编号以分隔符隔开,这样处理角色新增,删除,编辑权限会比较方便,只需将提交的权限覆盖(update)原来的权限即可。但处理权限或者模块的删除时依然比较麻烦,角色表数据量大的话,要么整表replace,要么先搜索出含有(要删除的)权限的记录,再更新,搜索效率是个必须要考虑的问题。
你的第1个方法容易造成逻辑混乱,第2个方法可以,不过每次操作都需要先删(delete 角色对应的权限)后加(insert 角色对应的权限),逻辑是清晰,但频繁操作数据库,也是一个问题。
网上讨论的还有2的n次幂叠加,素数叠乘,二进制位数标识....没操作过,不知效率如何,你可以查查看。

解决方案 »

  1.   

    用户当前的权限集合是A  目标权限集合是B
    A-B 说明是需要删除的权限
    B-A 说明是需要新增的权限
    php的array_diff可以实现
      

  2.   

    A 表记录角色
    B 表记录用户权限
    用户权限可直接引用A表角色权限 也可由角色权限派生.
    派生出来的用户权限使用源角色名称,权限使用派生的独立权限.
      

  3.   

    HOHO 谢谢各位的回帖...
    由于工期比较紧,项目也不是很大,就直接使用第二种方式了, 比较简单。。呵呵
    谢谢!!!=====》yiyayoyo SysTem128 fdclf you_kind