今天無意中在首頁中看到了四海同志的一篇《實現業務系統中的使用者權限管理--設計篇》文章寫的非常的好,裡面的一些話似乎被其它許可權管理系統的設計轉來轉去,看上去都有種似曾相識的感覺,當然,也不排除那些文章最初是由四海同志寫的,後來被他們轉來轉去的。四海同志的文章我仔細看了下,算是看懂了吧。分析的挺透徹。我以前在b/s的許可權管理系統上研究過一段時間,有些小心得,來跟大家分享下,限於我個人能力,如果寫的不好,或哪裡說的不對,還望朋友們指出來,千萬不要拍我。
四海同志的文章中有這樣一句話:“傳統業務系統中,存在著兩種許可權管理,其一是功能許可權的管理,而另外一種則是資源許可權的管理,在不同系統之間,功能許可權是可以重用的,而資源許可權則不能"。似乎他的那個許可權設計也沒有能夠解決資源重用的問題。當然,如果它把資源檔分別存放在不通的檔案夾中,通過url來根據許可權來判斷那就另當別論了。
我這個人比較懶,總是想用一個通用的方法,放在哪裡都合適,因此在資料庫的設計上費了一番腦筋了。其實,很多的許可權管理系統都不太一樣,因此,很多開發人員開發出來的許可權管理系統放在別的地方,就不一定合適了,往往需要重新開發,許可權管理系統的結構不能變,變的僅僅是資料。在這樣的一個思想的指導下,我們就想法讓我們的結構不要變,儘可能的通用,其實結構在哪裡,還是體現在資料庫上了。四海同志說:“許可權”,“組”和“人”。而這三種元素可以任意添加,彼此之間不受影響。
而我卻認為,一個完整的許可權管理系統應該包括:使用者、角色、模組、資源這四個部分,在資料庫的表設計上,這四張表叫做許可權管理系統的實體表,只要把這四個實體表做出來,許可權管理系統的架構就搭建完整了,這樣的許可權管理系統翻譯成中文那就是:許可權管理系統是判斷(可能用判斷這個詞不是很準確)使用者或角色對什麼資源是否有什麼功能的這樣一個系統。這樣設計出來的許可權管理系統通用性、擴充性才夠強,系統足夠完整。四張實體表做好了,就意味著架構搭建好了,那麼邏輯關係怎麼辦呢?我當時設計的時候用另外的4張表來儲存他們之間的邏輯關係,總共8張表,四張實體表,四張邏輯關係表。 其它的許可權管理系統可能少於8張表,一般通用性不會太好的。通常都是在完整的基礎上做了下變化,有的利用繼承來做,有的利用位元運算,還有的雖然不通用,但是也是充分利用了自身的特點,一般都會少於8張表,但是一般翻譯成漢語都不完整。通常為:使用者對資源是否有什麼功能、使用者或角色對資源是否有許可權等等。。。。切記,通用的許可權管理系統無論是使用者、角色、模組、資源哪個方面,都可以在不改變架構的條件下去動態擴充,改變的僅僅是資料,而只要有這個思想,再結合自身項目的特點,相信設計和開發各種各樣不通的許可權管理系統不會有問題的。
受大家建議,附圖一張,如下所示:
轉自:http://www.cnblogs.com/wlb/archive/2008/12/12/1353752.html