不使用三方包時,如何在ThinkSNS中創建優雅的用戶權限管理

什麼是ThinkSNS ?

ThinkSNS(簡稱TS),一款全平臺綜合性社交系統,爲國內外大中小企業和創業者提供社會化軟件研發及技術解決方案,目前最新版本爲ThinkSNS+(簡稱TS+)、ThinkSNS V四、ThinkSNS【簡】。html

需求場景

就是用戶組+權限節點,這個需求 laravel 有不少很好的第三方包實現。下面描述代碼不參與緩存機制純數據庫查詢,給你們提供一個思路。laravel

下面的代碼都是來自於ThinkSNS+,是基於 Laravel 全新開發的 ThinkSNS 社交開源項目,遵循 Apache-2.0 開源協議。歡迎 Star 哦。git

數據表設計

其實這一塊我我的是參考的 Zizaco/entrust 由於我以爲,大多數狀況下,咱們要用的角色和權限節點都是真多用戶的。數據表設計以下:github

h7SGVm84q9.png

能夠看到關係以下 user -> role -> ability ,其中關係所有都是多對多關係。一個用戶能夠擁有多個 role,一個 ability 能夠被分配給多個 role 。數據庫

鏈式方法設計

程序圖片1.png

其中調用 $user->ability()->all() 和 $user->ability()->all() 都是返回的 集合 能夠鏈式調用集合下的全部方法進一步操做。緩存

ability 用戶 Trait


程序圖片2-1.png

 

程序圖片2-2.png

Ability 實例url

程序圖片3-1.png程序圖片3-2.png程序圖片3-3.png



Role 模型所需代碼設計

程序圖片4-1.png
程序圖片4-2.png

使用code

 

而後咱們打開 User 模型wen jia文件添加以下代碼:htm

class User ... {    use UserHasAbility; }

總結

其實性狀在 User 模型中只暴露了 roles 和 ability 兩個公開方法。可是已經足以勝任用戶組權限判斷邏輯了。

整個 ability 都是結合在集合之上的一些封裝,這樣是的代碼調用更加優雅。

以上代碼是在開發ThinkSNS+中的實際真實代碼。具體的實現可參考項目。

以上代碼都來自於ThinkSNS Plus,看完整的開發代碼能夠看倉庫:

GitHub: https://github.com/slimkit/thinksns-plus(開源不易,求 Star )

相關文章
相關標籤/搜索