从来没接触过这方面的,
我想对一个系统的后台进行权限设置, 即:某用户对某功能模块具有某些权限比如说 AA 用户对 账单管理 只具有查询权限
BB具有 查询、增加的权限。等等 就这样一个功能, 在程序我该如何设计呢? 包括数据表如何设计???

解决方案 »

  1.   

    UserGroup{group_id , group_name , ... }
    User{user_id , user_name , UserGroup.group_id , ... }
    BundleInfo{bundle_id , bundle_name , ... }
    BundleRight{right_id , right_name , ... }
    GroupRight{UserGroup.group_id , BundleInfo.bundle_id , BundleRight.right_id }说明:
    UserGroup 存放用户组的信息。
    User 存放用户信息。内含所属用户组的ID。
    BundleInfo 存放功能模块的信息。
    BundleRight 存放模块权限的信息。当然,这些信息越抽象,复用率越高。
    GroupRight 存放用户组权限的信息。用户组,针对哪个功能模块,具有哪个权限。
        若 GroupRight 中不存在该记录,则说明,该用户组没有这样的权限。
        三个字段做联合主键即可。实现方案:
    1.通过 User 的信息可以找到 UserGroup 的信息。
    2.从 GroupRight 中查询 对应模块权限的记录 ,
        如果有则权限校验通过,
        如果没有,则说明该用户组没有该模块的对应权限。
      

  2.   

    1.早期的设计方案:针对每一个要执行的动作做一个 代码识别,代码识别关联在每一个用户的权限表。其中代码识别可使用 10001 或是 insert,update 这种字符串 作为代码识别。
    2.如果是struts 框架 可使用拦截器(struts 1.x版本 使用过滤器),然后采用 代码识别方案也是可以,但是
    有另一种更规范的作法 就是 在拦截请求的时候 判断客户端请求的路径,然后根据路径去判断权限,这个控制可以细粒度,而且规范性好。但是前提是 设计要谨慎。
    3.采用 spring权限框架,其内在 也是预先拦截请求,然后根据配置路径去过滤。