这部分的代码在 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的继承功能感受有很多坑,先一边写一边解决吧。
目前没想把这个模块一次性的设计的很完善,想先搭建起来,一边写,一边完善。