一個朋友留言,提了一些關心的問題,這里說說自己的想法(不一定對)。
問題:數據范圍的控制:“事實上不是每個用戶都可以看到所有記錄的。以財務管理為例,部門經理只能查看金額小于1W的數據;而總經理則沒有限制”。象這樣要根據數據的某個字段對數據范圍進行控制,應該實現呢,是通過AOP動態改變執行的SQL嗎?這樣似乎不太可行,如果要執行的SQL特別復雜,那動態改變SQL 就更難了。現在的應用中一般使用hibernate,這樣的話就變成了動態改變HQL,也是難的。
回答:目前在我的代碼里就是通過AOP動態改變執行的SQL,改變HQL確實很困難,但是改變criteria就比較簡單了。對于特別復雜的sql,我的建議是把這些SQL直接寫到你的業務程序里去,或者單獨配置出來,和ibatis比較類似。
問題:單條數據ACL權限:由于數據是不斷增加的,所以要對單條數據的ACL權限,不應該是數據已存在,然后再對存在的數據授權,應該是對某種規則進行授權。以你舉的個人通訊錄為例,各人自己維護自己的通訊記錄,數據只對自己可見,要想實現對自己的數據的可再授權,應該是對符合某個規則的數據進行授權,也就是說 “要執行授權操作的人就是數據的擁有者”這是個規則,那是不是應該對這個規則授權呢。
回答:我理解的和你不一樣。我的理解是這樣的,實際中我把單條數據的權限劃分為擁有、瀏覽、修改、刪除四種權限,用戶擁有哪種權限就可以對數據進行相應哪種操作。“要執行授權操作的人就是數據的擁有者”也可以理解為“要執行授權操作的人就必須有該數據的擁有權限”,這可以理解為一種規則,但我更愿意把它理解為一種習慣,很顯然對習慣授權是沒有意義的。當然這里是存在規則的,這種規則簡單的說是這樣:當我新增一條數據時,哪些人對該條數據擁有擁有的權限,哪些人對該條數據擁有瀏覽的權限,哪些人對該條數據擁有修改的權限,哪些人對該條數據擁有刪除的權限。權限相關記錄會在新增這條數據時根據該規則生成。在上面的例子里,這一規則體現在:各人自己維護自己的通訊記錄,數據只對自己可見。也就是說在用戶新增自己的通訊記錄時,系統同時往權限表里插入了該用戶對該記錄的一個擁有權限記錄。
問題:數據字段權限:要實現對某個字段的權限控制,那是不是應該所有字段應該有個默認的操作呢,或者默認就是只可以查看,要進行修改的話就必須授權。但是通常整個應用中的字段非常多,這樣是乎不太合理。那是不是可以做成所有字段默認就是可以CRUD的,只有要控制的字段才進行權限判斷。同樣,由于使用 Hibernate來進行持久化,那對字段的控制是不是就變成了對類中屬性的控制。
回答:數據字段權限一直是一個很難辦的事情,實際上我很傾向于把這個問題推到頁面來解決。其實所有的權限控制最后都是要通過頁面來表現的。其實對字段來說,所需要的權限也很簡單:可見/不可見,只讀/可修改。這樣的話,通過標簽的形式來控制字段的顯示、只讀就顯得很自然。對字段的權限記錄可以放入到數據庫,或者xml中,與具體的pojo類沒有關系,當渲染頁面的時候,由標簽來讀取相關權限記錄并控制顯示。
問題:角色權限的繼承:角色權限的繼承通過規則來做,這個規則應該怎么設計呢。
回答:這個問題其實是一個分離關注點的問題。你可以抽象出一個規則接口,這個接口定義了對部門、角色下的用戶而言,哪些權限是可以從部門角色繼承的,繼承幾級,哪些是不可以的。然后再具體實現。更靈活的方式是定義出一個配置文件,運行時可以靈活修改。
http://www.aygfsteel.com/ronghao 榮浩原創,轉載請注明出處:)
FeedBack:
# re: 關于權限系統設計的一些問與答
只有注冊用戶登錄后才能發表評論。 | ||
![]() |
||
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關文章:
|
||
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
30 | 31 | 1 | 2 | 3 | 4 | 5 | |||
6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
27 | 28 | 29 | 30 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100
常用鏈接
留言簿(38)
隨筆分類
- ajax相關(9)
- cms(7)
- Head First Process-深入淺出流程(15)
- j2se基礎(6)
- JbpmSide(6)
- OOA/OOD(4)
- SOA、BPM(26)
- 工作日志(24)
- 工作流jbpm3(10)
- 張小慶,在路上(42)
- 心情小站(24)
- 權限相關(12)
- 表現層相關(4)
- 轉載(4)
隨筆檔案
- 2013年8月 (1)
- 2012年12月 (1)
- 2012年1月 (3)
- 2011年12月 (2)
- 2011年11月 (2)
- 2011年10月 (3)
- 2011年9月 (3)
- 2011年8月 (7)
- 2011年7月 (4)
- 2011年6月 (3)
- 2011年5月 (5)
- 2011年4月 (6)
- 2011年3月 (4)
- 2011年2月 (2)
- 2010年9月 (1)
- 2010年6月 (1)
- 2010年5月 (1)
- 2010年3月 (4)
- 2010年1月 (2)
- 2009年11月 (5)
- 2009年10月 (4)
- 2009年9月 (1)
- 2009年7月 (1)
- 2009年6月 (2)
- 2009年5月 (2)
- 2009年4月 (1)
- 2009年3月 (4)
- 2009年2月 (2)
- 2008年12月 (1)
- 2008年11月 (1)
- 2008年10月 (1)
- 2008年9月 (2)
- 2008年8月 (2)
- 2008年7月 (2)
- 2008年6月 (3)
- 2008年5月 (4)
- 2008年4月 (1)
- 2008年3月 (2)
- 2008年2月 (2)
- 2008年1月 (4)
- 2007年11月 (3)
- 2007年10月 (3)
- 2007年9月 (2)
- 2007年8月 (4)
- 2007年7月 (1)
- 2007年6月 (12)
- 2007年5月 (2)
- 2007年4月 (1)
- 2007年3月 (8)
- 2007年2月 (6)
- 2007年1月 (4)
- 2006年12月 (4)
- 2006年11月 (3)
- 2006年10月 (1)
- 2006年8月 (2)
- 2006年7月 (3)
- 2006年6月 (3)
- 2006年4月 (1)
- 2006年3月 (2)
- 2006年2月 (2)
- 2006年1月 (4)
- 2005年12月 (7)
- 2005年11月 (12)
文章分類
文章檔案
常去的網站
搜索
最新評論

- 1.?re: 使用Handler來增強Web服務的功能
- asdfasfd
- --ads
- 2.?re: 使用solr搭建你的全文檢索
-
@木哥哥
你的分詞器用的是什么啊?mmseg貌似可以的 - --陳冠馳
- 3.?re: 使用solr搭建你的全文檢索
-
@marten這是你的solr的schame.xml配置文件有問題。好好檢查下你的配置文件里面的字段什么的配置對著沒
- --陳冠馳
- 4.?re: 討論一下你覺得一個工作流產品好的標準
- 評論內容較長,點擊標題查看
- --深圳非凡信息技術有限公司
- 5.?re: DisplayTag應用
- name="test"從哪里來的,千篇一律的到處使用test卻沒有test的定義,sb
- --qige