這部分的代碼在 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的繼承功能感受有很多坑,先一邊寫一邊解決吧。
目前沒想把這個模塊一次性的設計的很完善,想先搭建起來,一邊寫,一邊完善。