我的权限管理系统:
数据库设计:user,role,module,userRole,roleModule五个表.
Java实现:User,Role,Module,三个实体类,并且Module加了一个属性(has),表示用户是否有此权限
再用了一个SecuriryManager来实现对userRole,roleModule操作,
在页面中,用户没有的权限要灰显,:我先查出所有的modules,再根据用户ID查出用户所拥有的权限modules,两个比对,并设has属性,
不知道这样设计实现好不好?还有没其它的实现?
还有一种,user role,right,module,operation,userRole,roleRight,七表权限中,权限表怎么与模块,操作表关联.

解决方案 »

  1.   

    这样每个会话都会有一份Modules对象在session中了,会造成内存消耗很大的.能不能只缓存一份modules.这个该怎么实现. 
      

  2.   

    你的业务需求是什么?资源可以直接授权给用户吗?资源对于用户可否继承?
    引用“在页面中,用户没有的权限要灰显,:我先查出所有的modules,再根据用户ID查出用户所拥有的权限modules,两个比对,并设has属性”,这样设计肯定不可以取!你为何不直接通过用户的id查出用户的资源呢? 
      

  3.   

    我的用户资源就是modules哟,是根据用户ID查出用户资源modules,但我也要把用户所没有的资源也列出来,但是是显灰哟.
      

  4.   

    我的一种设计:
    User,Role这两者是多对多关系,因此抽出一个中间表,user_role,这张表就存储userId和roleId,还有权限的优先级(当用户授权多个资源,可通过此得到优先级高的权限)。然后再用一张表存储t_acl存储主体标识:principal(是用户还是角色),principalId(主体的标识),moduleId(资源标识),has(是否允许访问)。
    上面的设计忽略了资源对用户的继承关系,还假设资源可以直接授权给用户,也可以授权给角色!
    至于“把用户所没有的资源也列出来,但是是显灰哟”,就按你的方法办,只是显灰最好用标签去判断
      

  5.   

    继承的权限就是用户共有的公共权限吧,这个明白了,
    我现在有另一个实现方式,
    就是把所有的资源都缓存到内存,这个作为所有用户共享,
    再根据用户ID查询出用户所拥有的权限ID,和缓存的资源比对,以达到实现页面中的功能
    .数据库基本就那些了.实现在你有没好的方法?