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

这部分的代码在 git

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

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

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

域模型: 框架

1. 权限 模块化

又能够分为操做和资源。如今先使用一个权限对象,之后会细分。 性能

任何一个权限都有一个相对应的url,因此每增长一个权限就须要修改代码。权限数据基础数据,并非直接配置好了就能够用。因此考虑把权限放入枚举。 url

目前权限只放在一个类中,任何增长权限都须要修改这个类。这不利于模块化,将来考虑把这个类拆分开,各个模块分别编辑本身的权限类。 spa

2. 角色 .net

系统主要经过以为来控制有或者没有受权。

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

角色能够正向受权,也能够负向受权。

角色可继承。

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的继承功能感受有很多坑,先一边写一边解决吧。

目前没想把这个模块一次性的设计的很完善,想先搭建起来,一边写,一边完善。

相关文章
相关标签/搜索