快速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的繼承功能感受有很多坑,先一邊寫一邊解決吧。

目前沒想把這個模塊一次性的設計的很完善,想先搭建起來,一邊寫,一邊完善。

相關文章
相關標籤/搜索