首頁  >  文章  >  php框架  >  一起聊聊Laravel中的permission權限管理的擴充包

一起聊聊Laravel中的permission權限管理的擴充包

WBOY
WBOY轉載
2022-05-02 09:00:163878瀏覽

這篇文章為大家帶來了關於laravel的相關知識,其中主要介紹了關於permission權限管理的擴充包相關問題,下面一起來看一下,希望對大家有幫助。

一起聊聊Laravel中的permission權限管理的擴充包

【相關推薦:laravel影片教學

什麼是多用戶角色

舉個例子,例如我們平常使用的論壇

站長------ 擁有最高權限,最主要的是能夠對使用者進行管理的權限

管理員----- 對一些文章的管理,不會造成對網站有較大的影響

vip ----- 對一些資源有下載權限

普通用戶---- 只能夠進行簡單的對自己文章的增刪改、評論等

遊客---- 只能進行基本的瀏覽


roles ------- 角色資訊:站長等

permissions ------- 權限資訊:管理內容等 model_has_roles ------- 模型對應角色= 使用者對應的角色role_has_permissions ------- 角色對應權限= 角色有什麼權限

model_has_permissions ----- -- 模型對應權限= 使用者有權限我們來梳理一下關聯關係

權限
(permissions)與

角色

(roles) ,一個權限可能被多個角色擁有,一個角色可能有多個權限,關聯關係:多對多(role_has_permissions)

用戶

權限

一對多(model_has_permissions)

使用者

角色

一對多(model_has_roles)

#由次來說,關係明確了,當使用者有什麼角色或有什麼權限,即執行對應的操作


#1. 安裝擴充包

composer require "spatie/laravel-permission:~2.7"

產生資料庫遷移檔:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

在migration 目錄下可看到相關表格信息,執行資料庫遷移

php artisan migrate

產生設定資訊:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"

在User 模型下載入

.....
use Spatie\Permission\Traits\HasRoles;  // use

class User extends Authenticatable
{

    use HasRoles;  // 加载角色相关信息
    .....

建立角色和使用者

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

.....
$role = Role::create(['name' => 'writer']);  // 创建角色
$permission = Permission::create(['name' => 'edit articles']);// 创建权限

##使用

為使用者新增權限

$user->givePermissionTo('edit articles');

為使用者新增角色

$user->assignRole('writer');

$user->assignRole(['writer', 'admin']);

給使用者刪除權限

$user->revokePermissionTo('edit articles');

給角色新增權限

$role->givePermissionTo('edit articles');

為角色新增權限

$role->givePermissionTo('edit articles');

撤銷一個權限並且新增一個新權限

$user->syncPermissions(['edit articles', 'delete articles']);

取得目前使用者的角色集合
$user->getRoleNames();
將多個角色同步到權限

$role->syncPermissions($permissions); //  @param array $permissions

$permission->syncRoles($roles);

從角色中刪除權限

$role->revokePermissionTo($permission);
$permission->removeRole($role);
取得目前的使用者的權限清單

$permissions = $user->permissions;
取得使用者的所有權限,或直接權限(odel_has_permissions),或從角色獲取,或從兩者取得

$permissions = $user->getDirectPermissions();
$permissions = $user->getPermissionsViaRoles();
$permissions = $user->getAllPermissions();
取得使用者的角色集合collection

$roles = $user->getRoleNames(); // Returns a collection
傳回指定角色的使用者| Returns only users with the role 'writer'

$users = User::role('writer')->get(); //
傳回指定權限的使用者

$users = User::permission('edit articles')->get();
使用者有什麼角色
$user->hasRole('writer');


驗證類別

#檢查是否有某個權限

$user->hasPermissionTo('edit articles');

$user->can('edit articles');
檢查是否有某個角色| 或列
$user->hasRole('writer');

$user->hasAnyRole(Role::all());

$user->hasAllRoles(Role::all());

傳遞id 值進行判斷是否有某個權限

$user->hasPermissionTo('1');
$user->hasPermissionTo(Permission::find(1)->id);
$user->hasPermissionTo($somePermission->id);
是否擁有一組權限
$user->hasAnyPermission(['edit articles', 'publish articles', 'unpublish articles']);
檢查一個角色是否有某些權限| 刪除某一些權限###
$role->hasPermissionTo('edit articles'); 

$role->revokePermissionTo('edit articles'); // 删除
######範本使用#########
@role('writer')
    I am a writer!
@else
    I am not a writer...
@endrole

------------------------

@hasrole('writer')
    I am a writer!
@else
    I am not a writer...
@endhasrole

------------------------

@can('edit articles') // 拥有某个权限 可执行操作
//
@endcan
######資料填入######
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

class RolesAndPermissionsSeeder extends Seeder
{
    public function run()
    {
        // Reset cached roles and permissions
        app()['cache']->forget('spatie.permission.cache');

        // create permissions
        Permission::create(['name' => 'edit articles']);
        Permission::create(['name' => 'delete articles']);
        Permission::create(['name' => 'publish articles']);
        Permission::create(['name' => 'unpublish articles']);

        // create roles and assign created permissions

        $role = Role::create(['name' => 'writer']);
        $role->givePermissionTo('edit articles');

        $role = Role::create(['name' => 'moderator']);
        $role->givePermissionTo(['publish articles', 'unpublish articles']);

        $role = Role::create(['name' => 'super-admin']);
        $role->givePermissionTo(Permission::all());
    }
}
######提示:如果在資料庫權限相關資訊表的修改,必須掉用清除快取的方法######
// 命令删除
php artisan cache:forget spatie.permission.cache  

app()['cache']->forget('spatie.permission.cache');
###【相關推薦:###laravel影片教學###】###

以上是一起聊聊Laravel中的permission權限管理的擴充包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除