安裝
composer require spatie/laravel-permission
github上有詳細介紹:https://github.com/spatie/laravel-permission
我先來說一下核心的判斷是否授權,
$user = AdminUser::find($adminId); $user->hasPermissionTo($name, 'admin')
$user為默認的User的Model對應find后實例,$name為當前的路由,可以用以下3種方式獲取
$router->currentRouteName(); $request->path(); $request->route()[1]['uri'];
前兩種比較常見,第三種是獲取當前訪問路由的$name值,像/xxx/{id}之類的,感覺比較實用,具體可以看下 http://www.cnblogs.com/cxscode/p/8435405.html
接下來講講Permission自動生成的5張表,roles角色表, role_has_permissions角色關聯權限表, permissions權限表, model_has_roles用戶關聯角色表, model_has_permission用戶關聯權限表
roles表
比較重要兩個字段name和guard_name,name是角色名,guard_name是應該算是權限的域,和中間件有關系,其層高於整個rbac(權限),這個值一般是admin,可能這個管理員還有前台的權限,那可能這部分權限的guard_name就會是web之類的詞了,
permissions表
比較重要兩個字段name和guard_name,name存的是當前權限訪問的路由,當然也可以是其他,一般是用路由,guard_name同roles表
model_has_roles表 和 model_has_permission表
這兩個表的model_id就是對應用戶表的id了
以下摘自Laravel-Permission 使用心得:http://blog.csdn.net/complicated19921001/article/details/78317969
1.執行完github上的命令,你的數據庫有
roles role_has_permissions permissions model_has_roles model_has_permission
2.在你的項目里 你不需要為role permission建立model,,你只需要userModel
3.在userModel里加上
use Illuminate\Foundation\Auth\User as Authenticatable; use Spatie\Permission\Traits\HasRoles; class UserModel extends Authenticatable { use HasRoles; protected $guard_name = 'web'; //your code }
new一個UserModel對象,這些方法都可以使用了,
1. user−>assignRole(‘writer′);
2.user->removeRole(‘writer’);
3. user−>syncRoles(params);(這個方法我個人比較喜歡,當我們改變一個user的角色時候,用它最好不過了,它會把本來有的角色給你取消,然后賦予新的角色,這樣特別省事,還能一次賦予好