淺談如何設(shè)置項(xiàng)目中每個(gè)功能點(diǎn)的權(quán)限
導(dǎo)讀:
一個(gè)用戶登錄系統(tǒng)之后,可以訪問哪些站點(diǎn),那些菜單,那些模塊,那些頁面,那些按鈕,都是可以通過權(quán)限進(jìn)行控制的。 一個(gè)權(quán)限做的比較完整的項(xiàng)目,一般人員管理,消息管理,菜單管理,站點(diǎn)管理,日志管理,部件管理,權(quán)限管理等等都是受權(quán)限控制的,這么多模塊每個(gè)功能點(diǎn)是如何在權(quán)限管理下跑的井井有條呢?最近老是看到很多人在發(fā)愁權(quán)限,所以把自己的一些見解寫出來,供大家參考,也只是自己的一點(diǎn)點(diǎn)思路,不足的地方,謝謝指出。
問題:剛開始做模塊的時(shí)候,模塊寫好了,被測試提過來“你的日志模塊功能點(diǎn)不受權(quán)限控制”,當(dāng)時(shí)就很模糊,什么是權(quán)限呀,去問測試人員,她打開一個(gè)頁面,上面有棵功能樹(很大,顯示各個(gè)模塊,以及模塊下面的操作),你的所有的功能點(diǎn)都沒在功能點(diǎn)樹上顯示,只有顯示在樹上的才可以把功能點(diǎn)分配給人,自己查去吧。回來看了下別人的代碼,呵呵原來一個(gè)模塊開發(fā)完之后需要給當(dāng)前模塊所有功能點(diǎn)注冊(cè)權(quán)限。帶著測試出的這個(gè)BUG,跟大家一起分享下一些知識(shí)點(diǎn),以及權(quán)限的核心思想吧。
1.什么是權(quán)限?
“權(quán)限就是有票你就進(jìn)”
去游樂園,去乘大巴,去坐地鐵,必須的買票吧?權(quán)限就像你手里的那張票。
“權(quán)限就是認(rèn)證不認(rèn)人”
權(quán)是"權(quán)力,制度",限是“限制,管理”,連起來就是:XXXX通過權(quán)力,制度去管理XXX,在現(xiàn)在中國有12多人口,政府也給每個(gè)人發(fā)了證“身份證”,抗日時(shí)期小日本通過“良民證”去管理“中國人民”,看來受管理的都有一個(gè)特點(diǎn)就是“他有證”。
2.你要給誰設(shè)權(quán)限----誰就是我們所說的功能點(diǎn)
我們要清楚的明白,我們要給系統(tǒng)里的用戶角色站點(diǎn)日志等等模塊設(shè)權(quán)限,讓有權(quán)限的人去管理自己權(quán)限下面的操作。
“你要用誰要去控制誰,你的功能點(diǎn)的粒度有多大”
第一個(gè)誰一般是用戶;第二個(gè)誰很可能是一個(gè)模塊(日志模塊),一個(gè)表對(duì)象,一個(gè)表里面的一條記錄,甚至是一個(gè)頁面的一個(gè)方法,甚至是一個(gè)安牛,你所謂的 功能點(diǎn)可以是上面的所有東西,但是你一定要明白誰要控制是誰?一般可以細(xì)化到一個(gè)模塊,一個(gè)頁面,頁面的一個(gè)“刪除”,“添加”按鈕。
3.怎樣去控制?
怎樣去唯一標(biāo)識(shí)這個(gè)“控件”,“方法”,“類”(也就是我說的功能點(diǎn))
"給每個(gè)'按鈕'一個(gè)身份證"既然權(quán)限是“權(quán)限就是認(rèn)證不認(rèn)人”,那么當(dāng)然的給沒個(gè)功能點(diǎn)加一個(gè)唯一標(biāo)識(shí)了。唯一標(biāo)識(shí)一般的方法是“模塊名稱+控件的ID”。
天呀,這不是要?dú)⒘宋覇幔窟@么多,沒辦法,嘻嘻,你必須這么干
4.權(quán)限管理模塊一直在干什么樣的工作【核心】
1.)當(dāng)一個(gè)用戶進(jìn)系統(tǒng)之后,可以拿到這個(gè)用戶所有有可以控制功能點(diǎn)的信息
比如可以拿到有權(quán)限的站點(diǎn),有權(quán)限的菜單,有權(quán)限的模塊,有權(quán)限的頁面等等。
2.)拿到系統(tǒng)里面所有的功能點(diǎn),然后把它分配給希望分配的角色或者用戶
權(quán)限管理模塊必須可以拿到系統(tǒng)里面你配置的所有的功能點(diǎn)(最好以一棵功能樹的形式展現(xiàn)出來),并且可以把權(quán)限分配給一些人員,角色,有權(quán)限的用戶可以把自己的權(quán)限分配給別人,權(quán)限大的用戶可以控制所有信息。
3.)當(dāng)開發(fā)人員開發(fā)一個(gè)新的模塊的時(shí)候,只要做簡單的操作就可以把新的功能點(diǎn)注冊(cè)到權(quán)限里面,權(quán)限模塊必須提供一個(gè)可擴(kuò)展的功能,當(dāng)系統(tǒng)里面多一個(gè)模塊的時(shí)候,可以讓開發(fā)人員迅速的注冊(cè)功能點(diǎn)(一般是XML格式)。
4.)當(dāng)用戶發(fā)送一個(gè)請(qǐng)求的時(shí)候,能返回當(dāng)前用戶是否能操作該按鈕(控件,對(duì)象)
開發(fā)人員只要把當(dāng)前用戶的Id與功能點(diǎn)的ID給權(quán)限服務(wù)就可以返回當(dāng)前用戶是否有操作當(dāng)前對(duì)象的權(quán)限
5.)權(quán)限管理模塊有自己內(nèi)置的潛規(guī)則,也就是優(yōu)先級(jí)
當(dāng)兩個(gè)權(quán)限發(fā)生沖突的時(shí)候,靠我們自己定義的優(yōu)先級(jí)進(jìn)行匹配
5.程序開發(fā)人員開發(fā)一個(gè)新的模塊如何注冊(cè)權(quán)限的?
1.)寫你的模塊代碼
2.)把你模塊的功能點(diǎn)都注冊(cè)到權(quán)限樹上(把你功能點(diǎn)寫到XML上),各個(gè)功能點(diǎn)進(jìn)行驗(yàn)證【如果沒有這個(gè)驗(yàn)證,功能點(diǎn)雖然掛到權(quán)限上了,但實(shí)際上是沒受權(quán)限限制的】
3.)超級(jí)管理員進(jìn)來,可以操作權(quán)限樹,把你的功能點(diǎn)權(quán)限分配給別人
5.)分配你權(quán)限的賬戶可以訪問你頁面上的操作
解決問題:“你消息模塊的刪除按鈕不受權(quán)限控制”如何修這個(gè)BUG?一個(gè)按鈕不受權(quán)限限制?怎么受權(quán)限限制呀?
1.)首先的把當(dāng)前按鈕的ID注冊(cè)到權(quán)限(模塊名+功能點(diǎn)名)一般這個(gè)就可以唯一標(biāo)識(shí)你當(dāng)前的ID
2.)然后在你當(dāng)前控件代碼里面寫,根據(jù)這個(gè)身份證去權(quán)限請(qǐng)求一個(gè)服務(wù),if(有權(quán)限)按鈕可用ELSE按鈕不可用【如果沒有這個(gè)驗(yàn)證,功能點(diǎn)雖然掛到權(quán)限上了,但實(shí)際上是沒受權(quán)限限制的】
3.)最后權(quán)限好用不好用只有測試人員去測了
備注:對(duì)于以些小的網(wǎng)站,其實(shí)我認(rèn)為權(quán)限設(shè)置到頁面級(jí)就可以了,沒必要注冊(cè)到所有的操作
原文鏈接:http://www.cnblogs.com/muer/archive/2011/05/07/zym.html
【編輯推薦】
- 項(xiàng)目經(jīng)理的力量應(yīng)該從哪里來?
- 新手軟件項(xiàng)目經(jīng)理該如何入門
- 軟件項(xiàng)目管理總體流程設(shè)計(jì)
- 軟件開發(fā)中項(xiàng)目管理的注意事項(xiàng)
- 如何在項(xiàng)目管理中減少團(tuán)隊(duì)的啟動(dòng)時(shí)間