您的位置:首页 > 编程语言 > Java开发

快速JavaEE轻量级框架&公用业务模块 设计&实现 5 - RBAC模块设计

2013-10-22 00:00 309 查看
这部分的代码在

http://git.oschina.net/terrymanu/miracle-framework/tree/master/miraclesea/module-rbac

经过考虑,决定先跳过service和webmvc的框架层。因为目前想不到要去写什么东西。想先实现一个业务模块,再根据需要往框架里提炼代码吧。

大部分系统都有权限管理模块,而最常用的权限管理系统是RBAC,基于角色的访问控制(Role-Based Access Control)。

域模型:

1. 权限

又可以分为操作和资源。现在先使用一个权限对象,以后会细分。

任何一个权限都有一个相对应的url,所以每增加一个权限就需要修改代码。权限数据基础数据,并不是直接配置好了就可以用。所以考虑把权限放入枚举。

目前权限只放在一个类中,任何增加权限都需要修改这个类。这不利于模块化,未来考虑把这个类拆分开,各个模块分别编辑自己的权限类。

2. 角色

系统主要通过觉得来控制有或者没有授权。

角色可以包含权限集合,另外角色也可以关联用户。

角色可以正向授权,也可以负向授权。

角色可继承。

3. 组

组和角色的概念类似,是一组角色的集合,类似于角色的快捷方式。

同样包含正向或者负向授权,可以分配角色,也可以直接分配权限。组可继承。

4. 用户

用户既是登录之后的系统用户。可以授予角色和组,同样支持正向和负向授权。

其中正负向授权,想使用JPA的继承来做。3种继承方式,倾向于选择SINGLE_TABLE方式,性能最高,不需要连表查询。

在使用SINGLE_TABLE方式继承的时候发现一个问题,记录一下。

在一对多读取子表的时候会抛出

Caused by: org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass:

通过查资料,在父Entity中加上@DiscriminatorOptions(force = true)可以解决这个问题。

原文摘要如下:

The force attribute is useful if the table contains rows with
"extra" discriminator values that are not mapped to a persistent class.
If force is set to true Hibernate
will specify the allowed discriminator values in the SELECT query, even when retrieving
all instances of the root class.

这个JPA的继承功能感觉有不少坑,先一边写一边解决吧。

目前没想把这个模块一次性的设计的很完善,想先搭建起来,一边写,一边完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息