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
页面效果是
201203242259359914.png  201203242259367372.png
创建一条记录:
201203242259368768.png 
可以看到 role admin 可以访问 MVC入口 这个菜单项
查看User Roles这个页面,可以看到,Jimmy这个账号已经被授予admin 角色。
201203242259362639.png 
接下来我们要实现,登陆后动态加载菜单
思路: 先增加finder,再增加搜索功能。经分析,我们要的结果是Node这个实体类,我要通过
User ->Role->Node 来查询。
这样我们需要使用finder 中 depth 参数。
这条路看起来行不通,因为关系都是通过中间实体实现的,在User Role Node这几个对象,并没有联系。
重新添加太麻烦,而且对原来的关系有影响。
所以我们换一种方法来实现。
 
实现:在User entity中增加三个静态方法:
201203242259372605.png 
User.getCurrentUser() 获得当前用户entity
User.getCurrentAuthorities() 获得当前用户角色
User.getCurrentUserMenuItem() 获得用户菜单项
 
目前实现的方法中 node id这个参数没有用,所有用户权限会加载到第一级菜单中。
如果没有授权就在node中href中写一个没有授权的url,其他的功能由客户端解析。
 
增加新功能 在未授权菜单项目上增加 “灰”标志,可以给二级菜单项授权,还不能实现给父节点授权后
子节点默认继承
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/JimmyYu/archive/2012/03/24/2416183.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值