星期五, 8月 15, 2008

權限系統重寫

不知道是不是自己特有的壞習慣,每隔幾個月或是幾年就會覺得自己先前寫的東西很爛,想把程式抓起來重寫。雖然自己明明就是屬於超弱的那群....

之前看phpgacl看起來還蠻喜歡的,可是仔細閱讀API以後,還是覺得它還有一些不符合自己需求的地方,舉例:

1.phpgacl不能直接利用現有的table,一定要call API一筆一筆匯入他的table變成他自己的格式,才能使用權限系統的功能。譬如說系統有一張使用者列表和兩張群組列表,那程式設計師就一定要想辦法把這些表格全部都用API塞進phpgacl裡面去,才能使用群組、權限的功能。(原段落有點誤會phpgacl,刪掉XD),期盼能寫出「table XXX自動屬於一般使用者群組」這種東西,不過有點難度XD

2.衝突的解決。在phpgacl的架構下,可以把一個ARO(使用者)指定到不同的群組下,但不同的群組可能有不同的權限,可能A群組可以做某件事情,但是B群組不能做,要是一個使用者同時屬於A和B群組那他的權限就會發生疑義,phpgacl此時會自動使用最新修改的權限,但這不一定適用所有應用的需要。比如使用者Joe同時屬於「一般使用者」和「水桶」兩個群組,前者可發文,後者不能發文,理想上應該設定「水桶」的「不能發文」為優先,但phpgacl不能這樣做。

3.缺乏Exception,或許phpgacl不用Exception有他的考量(比如效能,etc),可是不使用Exception很多特殊狀況就只能由phpgacl自己吞下去,可是這不一定是程式設計師想要的,像「衝突的解決」就是一個狀況。

4.個人覺得ACO、ARO、AXO的分法有點麻煩,造成介面稍微複雜一點,而且導致認證被限定在最多三維。同時只有使用者的ARO這邊可以設定群組,權限ACO本身不行,可是這不一定符合實況(比如應該要可以設定「論壇」可以被「一般使用者」「回文」,但「論壇」的子節點「置頂文章」例外),三維的認證可以支援到「人」「權限」「對象」,但三維有時候還是不夠用,比如論壇管理者可能會想要設定「正常」時,所有的「一般使用者」都可以發文,但「論壇唯讀」的時候「一般使用者」不能對論壇進行寫入,只有「管理者」可以。三維認證且ARO不支援群組設定的phpgacl就比較麻煩。

5.其實是最重要的原因,就是自己寫一個東西,總是成就感比較高=口=


目前按照這篇給的演算法,開始從最底層的樹狀結構開始重寫中.... 全文連結

0 意見: