最近在做OA的权限这块,但没有好的思路,上网搜了些资料,需要先做好数据库设计,我按照网上别人所说的设计去做,但是在权限表的那块,说是由模块和动作去组合成权限,这个我能明白,但是我觉得权限的话还是得通过自己手动的去拼接吧
比如模块 sys_user(在模块表中字段为moduleValue) 动作有add /delete /update /get(在动作表中字段为actionValue) 那我拼出来的权限(在权限表中字段为permitValue)有sys_user_add/sys_user_delete/sys_user_update /sys_user_get  但是这个拼接我是靠自己手动去组合的(也就是手动去添加),因为我不知道业务里面如何将那两个值组合在一起,但是如果是手动的话我没有必要需要模块表和动作表,我参考的资料如下
http://www.blogjava.net/DreamAngel/archive/2009/02/14/254641.html
权限 在系统中,权限通过模块+动作来产生,模块就是整个系统中的一个子模块,可能对应一个菜单,动作也就是整个模块中(在B/S系统中也就是一个页面的所有操作,比如“浏览、添加、修改、删除”等)。将模块与之组合可以产生此模块下的所有权限。 我只能理解说法,不知道如何做,如果可以的话可否举个业务例子,希望前辈们指点,小弟感激不尽,拜谢!!!

解决方案 »

  1.   

    我的自己的思路:
    权限表由模块和动作组成
    使用JDK1.5的注解也就是Annonation,自定义一个Annonation,包括两个属性,一个是模块名,一个是动作名,在处理的业务方法上比如action上添加该注释,通过interceptor或者Spring的AOP在访问该方法前进行拦截,用JAVA反射取得该方法的上自定义的Annonation,跟登陆用户的权限进行比较
      

  2.   

    楼主谈到了权限怎样定义的问题。你说的按照模块+操作来定义完全没有问题,而且非常好。这种层次的权限,如果是web系统,我建议直接使用Filter来进行控制。降低复杂度。很多人,尤其是使用过spring secuirty的人,经常会给dao/service设置权限。我不赞同该方法,因为这种方法不是从客户需求角度出发的。 客户要求非常简单,某某某具有某角色,就能访问某个链接;某某某不具有某个角色,因此不能访问该链接,如果访问该链接,拒绝之,并转移到拒绝页面。这种URL级别的控制,有很多网友已经有相关程序了。也可以参看ralasafe的UrlAclFilter,该Filter还可以控制URL的参数,如/custom?op=add这样的URL。
    解决了功能级权限以后,你就开始要留意数据级权限了(也就是总公司的人能查询哪些数据,分公司的人能查询哪些数据,这种行列级权限)。到这个时候,建议你参考Ralasafe
      

  3.   

    我是实现权限比较的简单,首先是把所有的模块做成一个表  比如(permitValue表)字段 id,p_id,模块名称,标识id(这里是标识这个模块是属于哪个模块的子模块,放p_id就可以的,假如是最上级模块可以用0标识),url 。这样通过控制递归能够生成一颗完整的树。
            然后在user表中放一个String字段,放该用户所拥有的权限的p_id,ping成一个字符串中间用逗号隔开,比如“1,2,3,4,5,”;用的时候用split(",");这样基本上可以控制树的形状了,我想通过这个思路,楼主也应该明白每个模块的 增删改查的权限控制了吧!
      

  4.   

    OA 权限限制这块,主要还是看数据库表设计,一对多,还是多对一,要先弄好思路 在写,一般的OA 是一对多的关系,要有张中间表来维持他们的双方关系!
      

  5.   

    Ext JS2做前台的OA
    http://www.family168.com/springsecurity/demo/security-swf.html