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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2022-06-06 19:42:39
轉載
3999 人瀏覽過

這篇文章為大家帶來了關於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
最新問題
composer安裝laravel安裝不上
來自於 1970-01-01 08:00:00
0
0
0
Laravel 5.1 登入 laravel 自備的 沒有啦
來自於 1970-01-01 08:00:00
0
0
0
Laravel Space/laravel-backup 無法安裝
來自於 1970-01-01 08:00:00
0
0
0
為什麼thinkphp比laravel效能好?
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板