ホームページ  >  記事  >  PHPフレームワーク  >  Laravelの権限管理拡張パッケージについて話しましょう

Laravelの権限管理拡張パッケージについて話しましょう

WBOY
WBOY転載
2022-05-02 09:00:163922ブラウズ

この記事では、laravel に関する関連知識を紹介しており、主にパーミッション権限管理の拡張パッケージに関する問題点を紹介していますので、一緒に見ていきましょう。

Laravelの権限管理拡張パッケージについて話しましょう

[関連する推奨事項: laravel ビデオ チュートリアル]

マルチユーザー ロールとは

例, 例えば、私たちが普段使っているフォーラム

Webmaster-----は最高の権限を持っており、最も重要なのはユーザーを管理する権限

Administrator-----です。記事の管理はウェブサイトに大きな影響を与えない人もいます

vip ----- 一部のリソースのダウンロード権限があります

一般ユーザー ---- 簡単な編集のみ可能自分の記事の追加、削除、変更、コメントなど

訪問者 ---- 基本的な閲覧のみを実行できます

テーブルの作成


  • roles ------- ロール情報: Webmaster など
  • permissions ------- 権限情報: 管理コンテンツ、など。
  • model_has_roles ------- モデルに対応するロール = ユーザーに対応するロール
  • role_has_permissions ------- ロールに対応する権限 = 権限の内容ロールは
  • model_has_permissions を持っています ----- -- モデルに対応する権限 = ユーザーは権限を持っています

関係を整理しましょう

##Permissions (権限) および ロール (ロール)、1 つの権限は複数のロールによって所有される場合があり、1 つのロールは複数の権限を持つ場合があります。関連付け関係: 多対多 (role_has_permissions)

User および Permissions 1 対多 (model_has_permissions)

User および role 1 つ-to-many (model_has_roles)

繰り返しになりますが、関係は明確であり、ユーザーがどのような役割や権限を持っているかに応じて、対応する操作が実行されます

1拡張機能パッケージをインストールします

composer require "spatie/laravel-permission:~2.7"
データベース移行ファイルを生成します:

php 職人ベンダー:パブリッシュ --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

移行ディレクトリ内の関連テーブル情報を確認し、データベース移行を実行できます

php artisan migrate
構成情報を生成します:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
ユーザー モデルでロード

.....
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
指定されたロールを持つユーザーを返します | ロールを持つユーザーのみを返しますロール「ライター」

$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の権限管理拡張パッケージについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。