laravel-permission ロール権限制御 [詳細コード説明]

藏色散人
リリース: 2020-06-20 13:35:58
転載
8218 人が閲覧しました

Laravel の次のチュートリアルコラムでは、laravel-permission ロールの権限制御について紹介します。

laravel-permission ロール権限制御 [詳細コード説明]

まず、GitHub アドレス
https://github.com/spatie/laravel- を投稿します。権限


それでは使用感について話しましょう
まずデータベースのテーブル構造について話しましょう。テーブルは全部で 6 つあります。好みに応じてテーブルを追加、変更、削除できますが、まずリストを作成しましょう。

最初はユーザー テーブル (ユーザー) で、言うまでもなく、名前やメール アドレスなどの基本情報が含まれています。

Permissions テーブル (permissions) は、すべての権限を格納するテーブルです。権限には、コントローラのアクセス権限、インターフェイスのアクセス権限、モデルのアクセス権限があります。ここでは、インターフェイスのアクセス権限についてのみ説明します。

ロール テーブル (ロール) ロール テーブルにはすべてのキャラクターが保存され、キャラクターの名前がインデックスになります。

基本的なテーブルができましたが、それらはどのように関係しているのでしょうか?ぜひ次の部分をご覧ください!

ユーザーは権限テーブル (model_has_permissions) を持っています。このテーブルには、user_id と Permission_id の多対多関係テーブルが記録されます。ユーザーは権限を直接取得します。

ユーザーにはロール テーブル (model_has_roles) があります。このテーブルには、ユーザーが持つ権限が記録されます。このテーブルには、user_id と role_id が含まれます。これは、ユーザーとロールを記録する多対多の関係テーブルでもあります。中間テーブルとしても理解できます!

ロールには権限テーブル (role_has_permissions) があります。このテーブルには、ロールが持つ権限が記録されます。テーブルには、role_id、permission_id の 2 つのフィールドのみがあります。必要に応じて拡張も可能です!

次の図は、各関係を視覚的に確認するための図です:


ユーザーは直接権限を持っており、model_has_permissions の場合、ユーザーがロールを持っている場合は、model_has_role になり、ロール テーブル role_has_permission に移動します。

ロールを追加する方法 (依存関係パッケージがメソッドを提供します)
$role = Role::Create(['name' => 'add_title']);
ログイン後にコピー

Create にはパラメータがいくつありますか?次のコード

use Spatie\Permission\Models\Role;
public static function create(array $attributes = [])
{
    $attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard');

    if (static::where('name', $attributes['name'])->where('guard_name', $attributes['guard_name'])->first()) {
        throw RoleAlreadyExists::create($attributes['name'], $attributes['guard_name']);
    }

    if (isNotLumen() && app()::VERSION < &#39;5.4&#39;) {
        return parent::create($attributes);
    }

    return static::query()->create($attributes);
}
ログイン後にコピー

に示すように、元のメソッドには name と Guard_name があります。元のタスクを呼び出す代わりにこのメソッドを使用することもできます。たとえば、タスク

はシーダーで呼び出されます。これは、プロジェクトの初期化に付属しています。

namespace App\Containers\Authorization\Data\Seeders;
Apiato::call(&#39;Authorization@CreateRoleTask&#39;, [&#39;admin&#39;, &#39;Administrator&#39;, &#39;Administrator Role&#39;, 999,&#39;admin&#39;]);
ログイン後にコピー

名前空間アドレスをたどると、シーダーを見つけることができます。このタスクは、「承認」の下のタスクにもあります。独自のニーズに合わせてタスクを変更できます。

アクセス許可を追加する方法 (依存関係パッケージでもメソッドが提供されます)
$ permission  =  Permission :: create([ &#39; name &#39;  =>  &#39; edit articles &#39; ]);
ログイン後にコピー

ロールと同様に、記述されたタスクとその作成メソッドも見つかります。ここで言うことはあまりありません!

#ユーザーにアクセス許可を直接追加する方法、アクセス許可を削除する方法、およびユーザーにアクセス許可があるかどうかを確認する方法

//可以授予任何用户权限:
$ user - > givePermissionTo(&#39; edit articles &#39;);

//你也可以一次给多个权限
$ user - > givePermissionTo( &#39; edit articles &#39;, &#39; delete articles &#39;);

//你也可以传递数组
$ user - > givePermissionTo([ &#39; edit articles &#39;, &#39; delete articles &#39; ]);
ログイン後にコピー
//权限可以从用户撤销:
$ user - > revokePermissionTo(&#39; edit articles &#39;);
ログイン後にコピー
//或者一次性撤消并添加新的权限:
$ user - > syncPermissions([ &#39; edit articles &#39;,&#39; delete articles &#39; ]);
ログイン後にコピー
//您可以测试用户是否有权限:
$ user - > hasPermissionTo(&#39; edit articles &#39;);
ログイン後にコピー
//测试用户有多个权限:
$ user - > hasAnyPermission([ &#39; edit articles &#39;,&#39; publish articles &#39;,&#39; unpublish articles &#39; ]);
ログイン後にコピー
//您可以使用Laravel的默认can功能测试用户是否具有权限:
$ user - > can(&#39; edit articles &#39;);
ログイン後にコピー

ロールを通じてアクセス許可を使用する方法

//角色可以分配给任何用户:
$ user - > assignRole(&#39; writer &#39;);

//你也可以一次赋值多个角色
$ user - > assignRole( &#39; writer &#39;, &#39; admin &#39;);
ログイン後にコピー
//或者作为一个数组
$ user - > assignRole([ &#39; writer &#39;, &#39; admin &#39; ]);
ログイン後にコピー
//角色可以从用户中删除:
$ user - > removeRole(&#39; writer &#39;);
ログイン後にコピー
//角色也可以同步:
//所有当前角色将被从用户中删除,而由传入的数组取代
$ user - > syncRoles([ &#39; writer &#39;, &#39; admin &#39; ]);
ログイン後にコピー
//您可以确定用户是否具有某个角色:
$ user - > hasRole(&#39; writer &#39;);
ログイン後にコピー
//您还可以确定用户是否有任何给定的角色列表:
$ user - > hasAnyRole(Role :: all());
ログイン後にコピー
//您还可以确定用户是否具有所有给定的角色列表:
$ user - > hasAllRoles(Role :: all());
ログイン後にコピー
//assignRole,hasRole,hasAnyRole,hasAllRoles 和removeRole函数可以接受一个字符串,
ログイン後にコピー
//一个\Spatie\Permission\Models\Role对象或一个\Illuminate\Support\Collection对象。

//可以给角色一个许可:
$ role - > givePermissionTo(&#39; edit articles &#39;);
ログイン後にコピー
//您可以确定角色是否具有某种权限:
$ role - > hasPermissionTo(&#39; edit articles &#39;);
ログイン後にコピー
//权限可以从角色中被撤销:
$ role - > revokePermissionTo(&#39; edit articles &#39;);
ログイン後にコピー
rrree

制限を設ける場所と使用する場所

まず、ユーザーがアクション内でこの権限を持っているかどうかを確認できます。

リクエストで使用することもできます。ユーザーがインターフェースをリクエストすると、システムはユーザーがこのインターフェースを渡す権限とロールを持っているかどうかを判断します。

もちろん、インターフェイスがメソッドを呼び出すときに、このリクエストを挿入する必要があります。

場所は以下に示されています

//该givePermissionTo和revokePermissionTo函数可以接受字符串或Spatie\Permission\Models\Permission对象。
//权限是从角色自动继承的。另外,个人权限也可以分配给用户。例如:
$ role  =  Role :: findByName(&#39; writer &#39;); 
$ role - > givePermissionTo(&#39; edit articles &#39;);
$ user - > assignRole(&#39; writer &#39;);
$ user - > givePermissionTo(&#39; delete articles &#39;);
ログイン後にコピー

概要:

laravelにはいくつかのロール権限コントロールがありますが、私はこれを選択します。laravel-permissionは簡単です検索する、それは誰が優れているか、誰が劣っているかではありません。一般に、ロール権限はロール テーブルと権限テーブルで構成され、ユーザー、ロール、権限間の関係の維持が行われます。実際、彼独自の方法を使用する必要はありません。

基本テーブル間の関係は多対多です。アタッチ、デッチ、同期を使用してテーブル間の関係を維持できます。

ゲームに十分慣れている場合は、関係テーブルは必要ありません。この 10% の関係を実現するために自分で作成することもできます。

以上がlaravel-permission ロール権限制御 [詳細コード説明]の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート