laratrust是一個(gè)權(quán)限管理輪子,可以在團(tuán)隊(duì)据过,用戶之間很好的處理權(quán)限問(wèn)題。Github地址 https://github.com/santigarcor/laratrust
1咏瑟,安裝 composer require "santigarcor/laratrust:4.0.*"
2酪捡,在config/app.php添加Provider
Laratrust\LaratrustServiceProvider::class,
3,在 config/app.php 添加別名
'Laratrust' => Laratrust\LaratrustFacade::class,
4尸红,publish 配置文件
php artisan vendor:publish --tag="laratrust"
這里需要注意個(gè)是使用第四的一條命令后在config中沒(méi)有l(wèi)aratrust.php 吱涉,使用 php artisan config:clear 然后在實(shí)行第四條
5,生成Migrations文件
php artisan laratrust:setup
6外里,生成數(shù)據(jù)庫(kù)表
php artisan migrate
到這里便完成啦用戶之間的權(quán)限配置
我們現(xiàn)在roles表中用模型添加兩條數(shù)據(jù)
$owner = new Role();
$owner->name = 'owner';
$owner->display_name = 'Project Owner'; // optional
$owner->description = 'User is the owner of a given project'; // optional
$owner->save();
$admin = new Role();
$admin->name = 'admin';
$admin->display_name = 'User Administrator'; // optional
$admin->description = 'User is allowed to manage and edit other users'; // optional
$admin->save();
添加權(quán)限數(shù)據(jù)
$createPost = new Permission();
$createPost->name = 'create-post';
$createPost->display_name = 'Create Posts'; // optional
// Allow a user to...
$createPost->description = 'create new blog posts'; // optional
$createPost->save();
$editUser = new Permission();
$editUser->name = 'edit-user';
$editUser->display_name = 'Edit Users'; // optional
// Allow a user to...
$editUser->description = 'edit existing users'; // optional
$editUser->save();
角色和權(quán)限分配&移除
$owner = Role::find(1); //所有者權(quán)限
$admin = Role::find(2); //管理員怎爵,有管理用戶的權(quán)限
$createPost = Permission::find(1); 有創(chuàng)建文章的權(quán)限
$editUser = Permission::find(2); 有編輯存在用戶的權(quán)限
$owner->attachPermissions([$createPost, $editUser]); // 讓用戶有創(chuàng)建文章和編輯用戶的權(quán)限,其實(shí)就是用了一個(gè)attach方法盅蝗,說(shuō)實(shí)話這樣的方法在5.3中有一個(gè)toggle方法來(lái)代替
$admin->attachPermission($createPost); // parameter can be a Permission object, array or id
// equivalent to $admin->permissions()->attach([$createPost->id]);
要移除這些權(quán)限只需要使用detachPermission即可
$admin->detachPermission($createPost); // parameter can be a Permission object, array or id
// equivalent to $admin->permissions()->detach([$createPost->id]);
用戶和角色之間的添加和移除
$user = User::find(1);
$user->attachRole($admin); // 添加用戶成為管理員 鳖链,或者$user->attachRoles([$admin, $owner]);
移除 只需要detachRole或者detachRoles
$user->detachRole($admin); //$user->detachRoles([$admin, $owner]);
我這邊在移除的時(shí)候報(bào)錯(cuò),只要遇見有count()的地方就出錯(cuò)墩莫,這個(gè)不是關(guān)鍵的芙委,估計(jì)是PHP版本問(wèn)題,我用的是7.2的測(cè)試版狂秦!
用戶權(quán)限添加和移除
$user->attachPermission($editUser); //添加用戶有編輯用戶的權(quán)限
$user->attachPermissions([$editUser, $createPost]);
$user->syncPermissions([$editUser->id, $createPost->id]);
移除
$user->detachPermission($createPost);
$user->detachPermissions([$createPost, $editUser]);
檢查角色或權(quán)限
$user->hasRole('owner'); // 檢查用戶是否有所有者的權(quán)限
$user->hasRole('admin'); // 檢查用戶是否有admin的權(quán)限
$user->can('edit-user'); // false 編輯用戶
$user->can('create-post'); // true 創(chuàng)建文章
也可以使用hasPermission 和 isAbleTo 代替can
也可以使用多選的方式灌侣,也就是或的方式,滿足其中的一個(gè)就可以
$user->hasRole(['owner', 'admin']); // true
$user->can(['edit-user', 'create-post']); // true
$user->hasRole('owner|admin'); // true
$user->can('edit-user|create-post'); // true
完整資料請(qǐng)看官方文檔故痊,文檔和詳細(xì)顶瞳,只有英語(yǔ)有點(diǎn)惡心 https://laratrust.readthedocs.io/en/4.0/usage/concepts.html#set-things-up
查看用戶所有的權(quán)限 $user->allPermissions()
當(dāng)然可以這樣查詢 $users = User::whereRoleIs('owner')->get();
在這里其實(shí)已經(jīng)完成了 這三角之間權(quán)限的轉(zhuǎn)換玖姑,角色-權(quán)限-用戶
在這里如果一個(gè)角色有某種權(quán)限愕秫,而用戶擁有這種角色的話,最終用戶也是同樣的擁有這種權(quán)限的Q媛纭(對(duì)于相反的我沒(méi)有去嘗試戴甩,有朋友嘗試成功的話還請(qǐng)告訴我,也就是說(shuō) :用戶關(guān)聯(lián)角色闪彼,用戶關(guān)聯(lián)權(quán)限甜孤,是不是角色也有某種權(quán)限?)