ホームページ > 記事 > PHPフレームワーク > Laravelの権限管理拡張パッケージについて話しましょう
この記事では、laravel に関する関連知識を紹介しており、主にパーミッション権限管理の拡張パッケージに関する問題点を紹介していますので、一緒に見ていきましょう。
[関連する推奨事項: laravel ビデオ チュートリアル]
例, 例えば、私たちが普段使っているフォーラム
Webmaster-----は最高の権限を持っており、最も重要なのはユーザーを管理する権限
Administrator-----です。記事の管理はウェブサイトに大きな影響を与えない人もいます
vip ----- 一部のリソースのダウンロード権限があります
一般ユーザー ---- 簡単な編集のみ可能自分の記事の追加、削除、変更、コメントなど
訪問者 ---- 基本的な閲覧のみを実行できます
関係を整理しましょう
##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 サイトの他の関連記事を参照してください。