权限控制,要控制到具体的action方法,讨论下怎么做最好?就是要控制到比如某个用户有没有增删改的功能,如果没有,就不可以对数据操作,但可以查看。这个就要求权限控制到每个具体的方法。我有一种想法是 比如添加标志为1,修改为2,删除为3,然后看他的角色来控制着三个功能,但这样做,就不能对个别用户或个别模块设置了,只能是对某个角色来设置,请指教。

解决方案 »

  1.   

    把action看作一种资源,action里头的方法都是一种操作,在授权的时候,把每一个action里头的操作赋给主体
      

  2.   

    用户表,角色表,权限表,角色权限关联表用户表引用角色表角色权限关联表 把角色所包含的权限在表中利用外键对应例如角色1 权限0
           1 权限3
           1 权限4 
    那么角色1就有了0,3,4三个权限
    再用用户引用这个角色至于权限控制建议登录时查出放在session中,做每次操作时从session中取出,做权限判断   
      

  3.   

    如果是struts 1.x 你要在每个action的子方法 设定一个权限代码,比如 DoWhat 然后每次调用这个子方法的时候,到数据库检查 该用户权限表里是否有DoWhat这个代码(之所以建议到数据库检查,是因为第一:检查权限代码,其实就是一个select操作,只要你做好权限代码的索引,其实速度是很快的,并不会影响性能。第二:不建议放到 session,因为如果 管理员改变了权限,那么session的值并不会即使更新,而且session的容量在实际使用中,一般都在100k以内,太大了,用户数一旦上来,性能就会急剧下降。)。
    如果是struts 2.x 也可以使用struts 1.x的方式,但是推荐是struts2 的拦截器,这是struts2 的优点,在实际操作中,如果要降低耦合度,可以以采用反射来判断当前调用的action方法,然后再拦截器去过滤权限判断。
      

  4.   

    对系统各功能模块(系统管理、任务管理......)不同(动作 添加、删除、修改......) 设计权限。
    U_RIGHT -- 权限表  
    (
      MODULEID    VARCHAR2(100) not null, --模块ID //SysManage    
      PRIVILEGEID VARCHAR2(100) not null, --权限ID //UserManage
      ROLEID      VARCHAR2(50) not null,  -- 角色ID
      PRIVILEGE   INTEGER                 -- 权限值 每个动作在当前功能模块的唯一值(1.2.4.8.16......)
    )
    U_ROLE --角色表
    (
      ROLEID       VARCHAR2(50) not null, 
      ROLENAME     VARCHAR2(100) not null,
      ROLEDESC     VARCHAR2(250) not null
     )BaseAction extends Action 
    public boolean checkPrivilege(HttpServletRequest request, String pagename,
                                      String action)
    {
    }LZ参考....
      

  5.   

        另外增加一个权限表,指明其权限, 也可以在原有用户表中添加权限字段,到时在action中根据其登录用户来判断,并且 同意6楼观点, 不要存放在session中...
      

  6.   

    Listener粗粒度                AOP实现细粒度````````具体操作还是多表关联起来...暂无想到他法``