note:给hr系统增加授权模块

需求:权限系统使用基于角色的权限管理系统实现。
 
系统对象:
user(用户)
roleuser(用户角色)
role(角色)
roleactionresource(角色资源)
actionresource(可访问url)
module(模块)(tree)
 
Jimmy
--授权管理 数据持久化到数据库  
--用户登录上去之后左侧功能导航模块加载
--日报周报模块中必要信息带出来(取用户数据)
 
思路:
hr项目已经整合typicalsecurity addon,在这个addon中已经有实体类user、role和userrole
typicalsecurity中role和页面的关系是通过tag标签或xml来定义的。而在hr的项目中我们希望通过
数据库来管理。
我增加一个rolenode实体来管理,一个角色有哪些node。
这个rolenode有两个引用对象,一个是role,一个是node,
关系是一个role有多个rolenode,一个rolenode有一个role;对应node也是一样。
我们来看如何实现:
用命令增加rolenode实体,然后生成页面
// Spring Roo 1.1.5.RELEASE [rev d3a68c3] log closed at 2011-10-24 16:49:43
// Spring Roo 1.1.5.RELEASE [rev d3a68c3] log opened at 2011-10-25 08:43:52
entity --class ~.domain.RoleNode 
field reference --fieldName node --type ~.entity.Node --cardinality MANY_TO_ONE 
// [failed] field reference --fieldName role --type ~.domain.Role --cardinality MANY_TO_ONE 
field reference --fieldName role --type ~.domain.Role --cardinality MANY_TO_ONE --permitReservedWords yes
web mvc all --package ~.web
页面效果是
 
创建一条记录:
 
可以看到 role admin 可以访问 MVC入口 这个菜单项
查看User Roles这个页面,可以看到,Jimmy这个账号已经被授予admin 角色。
 
接下来我们要实现,登陆后动态加载菜单
思路: 先增加finder,再增加搜索功能。经分析,我们要的结果是Node这个实体类,我要通过
User ->Role->Node 来查询。
这样我们需要使用finder 中 depth 参数。
这条路看起来行不通,因为关系都是通过中间实体实现的,在User Role Node这几个对象,并没有联系。
重新添加太麻烦,而且对原来的关系有影响。
所以我们换一种方法来实现。
 
实现:在User entity中增加三个静态方法:
 
User.getCurrentUser() 获得当前用户entity
User.getCurrentAuthorities() 获得当前用户角色
User.getCurrentUserMenuItem() 获得用户菜单项
 
目前实现的方法中 node id这个参数没有用,所有用户权限会加载到第一级菜单中。
如果没有授权就在node中href中写一个没有授权的url,其他的功能由客户端解析。
 
增加新功能 在未授权菜单项目上增加 “灰”标志,可以给二级菜单项授权,还不能实现给父节点授权后
子节点默认继承
 
 
 
 
 
 
 
posted on 2012-03-24 23:00  Jimmy_June  阅读(210)  评论(0编辑  收藏  举报