ThinkSNS(簡稱TS),一款全平臺綜合性社交系統,爲國內外大中小企業和創業者提供社會化軟件研發及技術解決方案,目前最新版本爲ThinkSNS+(簡稱TS+)、ThinkSNS V四、ThinkSNS【簡】。html
就是用戶組+權限節點,這個需求 laravel 有不少很好的第三方包實現。下面描述代碼不參與緩存機制純數據庫查詢,給你們提供一個思路。laravel
下面的代碼都是來自於ThinkSNS+,是基於 Laravel 全新開發的 ThinkSNS 社交開源項目,遵循 Apache-2.0 開源協議。歡迎 Star 哦。git
其實這一塊我我的是參考的 Zizaco/entrust 由於我以爲,大多數狀況下,咱們要用的角色和權限節點都是真多用戶的。數據表設計以下:github
能夠看到關係以下 user -> role -> ability ,其中關係所有都是多對多關係。一個用戶能夠擁有多個 role,一個 ability 能夠被分配給多個 role 。數據庫
其中調用 $user->ability()->all() 和 $user->ability()->all() 都是返回的 集合 能夠鏈式調用集合下的全部方法進一步操做。緩存
Ability 實例url
Role 模型所需代碼設計
使用code
而後咱們打開 User 模型wen jia文件添加以下代碼:htm
class User ... { use UserHasAbility; }
其實性狀在 User 模型中只暴露了 roles 和 ability 兩個公開方法。可是已經足以勝任用戶組權限判斷邏輯了。
整個 ability 都是結合在集合之上的一些封裝,這樣是的代碼調用更加優雅。
以上代碼是在開發ThinkSNS+中的實際真實代碼。具體的實現可參考項目。
以上代碼都來自於ThinkSNS Plus,看完整的開發代碼能夠看倉庫:
GitHub: https://github.com/slimkit/thinksns-plus(開源不易,求 Star )