本文主要全面講解在不適用第三方包的狀況下,如何在基於Laravel框架上,研發社交系統ThinkSNS+時,簡歷一套優雅而不失性價比的用戶權限管理體系功能,【內含ThinkSNS真實代碼】。laravel
需求場景git
就是用戶組+權限節點,這個需求 laravel 有不少很好的第三方包實現。下面描述代碼不參與緩存機制純數據庫查詢,給你們提供一個思路。github
下面的代碼都是來自於ThinkSNS+,是基於 Laravel 全新開發的 ThinkSNS 社交開源項目,遵循 Apache-2.0 開源協議。歡迎 Star 哦。數據庫
數據表設計緩存
其實這一塊我我的是參考的 Zizaco/entrust 由於我以爲,大多數狀況下,咱們要用的角色和權限節點都是真多用戶的。數據表設計以下:框架
能夠看到關係以下 user -> role -> ability ,其中關係所有都是多對多關係。一個用戶能夠擁有多個 role,一個 ability 能夠被分配給多個 role 。spa
鏈式方法設計
其中調用 $user->ability()->all() 和 $user->ability()->all() 都是返回的 集合 能夠鏈式調用集合下的全部方法進一步操做。設計
ability 用戶 Traitcode
Ability 實例圖片
Role 模型所需代碼
使用
而後咱們打開 User 模型wen jia文件添加以下代碼:
class User ...
{
use UserHasAbility;
}
總結
其實性狀在 User 模型中只暴露了 roles 和 ability 兩個公開方法。可是已經足以勝任用戶組權限判斷邏輯了。
整個 ability 都是結合在集合之上的一些封裝,這樣是的代碼調用更加優雅。
以上代碼是在開發ThinkSNS+中的實際真實代碼。具體的實現可參考項目。
以上代碼都來自於ThinkSNS Plus,看完整的開發代碼能夠看倉庫:
GitHub: https://github.com/slimkit/th...(開源不易,求 Star )
ThinkSNS官網:http://www.thinksns.com/