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