ホームページ >PHPフレームワーク >Laravel >Laravelのパーミッション機能の実践:ユーザー組織構造のパーミッション制御の実装方法

Laravelのパーミッション機能の実践:ユーザー組織構造のパーミッション制御の実装方法

PHPz
PHPzオリジナル
2023-11-02 08:17:031325ブラウズ

Laravelのパーミッション機能の実践:ユーザー組織構造のパーミッション制御の実装方法

Laravel の権限機能の実践的な応用: ユーザー組織構造の権限制御を実装するには具体的なコード例が必要です


はじめに:

Web アプリケーションの急速な開発に伴い、ユーザー権限の制御は重要な機能要件となっています。 Laravel は、人気のある PHP フレームワークとして、柔軟で強力な権限管理機能を提供します。この記事では、Laravelを使用してユーザー組織構造の権限制御を実装する方法と、具体的なコード例を紹介します。

1. ユーザーの組織構造のアクセス許可制御の要件
    多くのアプリケーションでは、通常、ユーザーのアクセス許可は組織構造に従って割り当てられ、管理されます。たとえば、企業には複数の部門があり、各部門には異なる従業員がいます。この場合、実装する必要がある機能は次のとおりです:
  1. 部門管理者は自分の部門の従業員を管理できますが、他の部門の情報にはアクセスできません;
  2. 役員はアクセスでき、会社全体のデータを管理する;
一般の従業員は自分の個人情報にのみアクセスできます。


2. Laravel の権限管理機能を使用する
    Laravel フレームワークには、上記のニーズを満たすことができる一連の権限管理機能が組み込まれています。 Laravelの権限機能を利用して、ユーザー組織構造の権限制御を実現する方法を紹介します。

  1. Laravel の権限管理プラグインをインストールする
まず、Laravel プロジェクトに権限管理プラグインをインストールします (一般的に使用されるのは spatie/laravel-permission と laravel-permission です)。ここでは、spatie/laravel-permission をデモンストレーションの例として使用します。コマンド ラインで次のコマンドを実行してインストールします:

composer require spatie/laravel-permission

次に、次の構成を config/app.php ファイルに追加します:

'providers' => [
    // ...
    SpatiePermissionPermissionServiceProvider::class,
],

'aliases' => [
    // ...
    'Permission' => SpatiePermissionFacadesPermission::class,
]
    最後に、データベース移行コマンドを実行します。必要なデータテーブルを作成するには:
  1. php artisan migrate

  2. ユーザー、ロール、および権限モデルを作成する
Laravel では、権限管理を実装するために 3 つのモデルを作成する必要があります: ユーザー (ユーザー)、ロール (役割)および許可 (許可)。ここで User モデルを作成し、spatie/laravel-permission プラグインを使用してロールと権限を管理します。次のコマンドを実行してこれらのモデルを生成します。

php artisan make:model User
php artisan make:model Role
php artisan make:model Permission
    次に、生成されたユーザー モデルに次のコードを追加します。
  1. <?php
    
    namespace App;
    
    use IlluminateNotificationsNotifiable;
    use IlluminateFoundationAuthUser as Authenticatable;
    use IlluminateDatabaseEloquentRelationsBelongsToMany;
    use SpatiePermissionTraitsHasRoles;
    
    class User extends Authenticatable
    {
        use Notifiable, HasRoles;
    
        // ...
    }

  2. 部門と従業員のモデルを作成します
ユーザーの組織構造を実装するには、部門と従業員のモデルも作成する必要があります。次のコマンドを実行してこれらのモデルを生成します。

php artisan make:model Department
php artisan make:model Employee

次に、Department モデルに次のコードを追加します。

<?php

namespace App;

use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentRelationsHasMany;

class Department extends Model
{
    // ...

    public function employees(): HasMany
    {
        return $this->hasMany(Employee::class);
    }
}
    Employee モデルに次のコードを追加します。
  1. <?php
    
    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    use IlluminateDatabaseEloquentRelationsBelongsTo;
    
    class Employee extends Model
    {
        // ...
    
        public function department(): BelongsTo
        {
            return $this->belongsTo(Department::class);
        }
    }

  2. ロールと権限の定義
上記の要件に基づいて、部門管理者、役員、一般従業員の 3 つのロールを定義する必要があります。データベースにロールテーブルを作成し、Laravel が提供する移行コマンドを使用してロールのデータテーブルを生成します。

php artisan make:migration create_roles_table --create=roles
php artisan migrate

次のコマンドを実行して、これら 3 つのロールを追加します。

php artisan permission:create-role department_manager
php artisan permission:create-role executive
php artisan permission:create-role employee

次に、いくつかの権限を定義する必要もあります。データベースに権限テーブルを作成し、移行コマンドを使用して権限データ テーブルを生成します。

php artisan make:migration create_permissions_table --create=permissions
php artisan migrate
    次のコマンドを実行して権限を追加します。
  1. php artisan permission:create-permission manage_department
    php artisan permission:create-permission manage_employee

  2. 役割と権限を割り当てます。権限
権限制御を実装するには、対応するユーザーと部門にロールと権限を割り当てる必要があります。サンプル コードは次のとおりです:


use AppUser;
use AppRole;
use AppPermission;
use AppDepartment;
use AppEmployee;

// 创建一个部门管理员用户
$user = User::create([
    'name' => '部门管理员',
    'email' => 'manager@example.com',
    'password' => bcrypt('password'),
]);

// 创建一个部门
$department = Department::create([
    'name' => '销售部门',
]);

// 给用户分配部门管理员角色
$user->assignRole('department_manager');

// 将部门管理员角色与权限关联起来
$role = Role::findByName('department_manager');
$role->givePermissionTo('manage_department');

// 将部门管理员与部门关联起来
$employee = Employee::create([
    'name' => '张三',
    'department_id' => $department->id,
]);

3. 権限制御のサンプル コード
    権限管理の基本設定が完了したので、権限制御コードのセットアップを開始できます。以下にサンプル コードを示します。
部門管理者は自分の部門の従業員を管理できますが、他の部門の情報にアクセスすることはできません。
  1. public function index()
    {
        $user = Auth::user();
        $department = $user->employee->department;
    
        // 部门管理员只能查看本部门的员工列表
        $employees = $department->employees;
    
        return view('employees.index', compact('employees'));
    }
幹部は会社全体のデータにアクセスして管理できます。
  1. public function index()
    {
        $user = Auth::user();
    
        // 高管可以查看所有部门的员工列表
        $employees = Employee::all();
    
        return view('employees.index', compact('employees'));
    }
一般の従業員は、自分自身の個人情報にのみアクセスできます。 ######うわー

以上がLaravelのパーミッション機能の実践:ユーザー組織構造のパーミッション制御の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。