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

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