ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP6 権限管理ガイド: ユーザー権限制御の実装

ThinkPHP6 権限管理ガイド: ユーザー権限制御の実装

王林
王林オリジナル
2023-08-13 18:09:072125ブラウズ

ThinkPHP6 権限管理ガイド: ユーザー権限制御の実装

ThinkPHP6 権限管理ガイド: ユーザー権限制御の実装

はじめに:
Web アプリケーションでは、権限管理は非常に重要な部分であり、ユーザーの制御に役立ちます。 ' システム リソースへのアクセス権と操作権を付与し、システムのセキュリティを保護します。 ThinkPHP6 フレームワークでは、強力な権限管理機能を使用してユーザー権限制御を実装できます。

1. データベース テーブルを作成する
ユーザー権限制御の実装を開始する前に、まずユーザー、ロール、権限情報を保存するための対応するデータベース テーブルを作成する必要があります。テーブルを作成する SQL ステートメントは次のとおりです:

  1. ユーザー テーブル (ユーザー):
    CREATE TABLE user (
    id int (11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ユーザー ID',
    username varchar(50) NOT NULL COMMENT 'ユーザー名',
    password char(32) NOT NULL COMMENT ' パスワード',
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ユーザー テーブル';
  2. ロール テーブル (ロール):
    CREATE TABLE role (
    id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ロール ID',
    name varchar(50) NOT NULL COMMENT 'ロール名',
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ロール テーブル';
  3. 権限テーブル (権限):
    CREATE TABLE permission (
    id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '権限 ID',
    name varchar (50 ) NOT NULL COMMENT '権限名',
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='権限テーブル';
  4. User -role 関連テーブル (user_role):
    CREATE TABLE user_role (
    user_id int(11) unsigned NOT NULL COMMENT 'ユーザー ID',
    role_id int(11) unsigned NOT NULL COMMENT 'ロール ID',
    主キー (user_id,role_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT= 'ユーザーとロールの関連付けテーブル';
  5. ロールと権限の関連付けテーブル (role_permission):
    CREATE TABLE role_permission (
    role_id int( 11) unsigned NOT NULL COMMENT 'ロール ID',
    permission_id int(11) unsigned NOT NULL COMMENT '権限 ID',
    主キー (role_id,permission_id )
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Role-Permission Association Table';

2. モデルの関連付けを定義する
ThinkPHP6 では、次のように使用できます。モデル ユーザー、ロール、権限間の関係を確立するための関連付け。対応するモデル定義は次のとおりです:

  1. ユーザー モデル (User.php):
    namespace appmodel;

use thinkModel;

classユーザーはモデルを拡張します
{

// 用户-角色关联
public function roles()
{
    return $this->belongsToMany(Role::class, 'user_role');
}

}

  1. ロール モデル (Role.php):
    namespace appmodel;

use thinkModel;

class ロールはモデルを拡張します
{

// 角色-权限关联
public function permissions()
{
    return $this->belongsToMany(Permission::class, 'role_permission');
}

}

  1. 権限モデル (Permission.php):
    namespace appmodel;

use thinkModel;

class Permission extends Model
{

// 权限-角色关联
public function roles()
{
    return $this->belongsToMany(Role::class, 'role_permission');
}

}

3. 権限ミドルウェアの定義
ThinkPHP6 では、ミドルウェアを使用できますユーザー権限の検証を統一的に処理します。以下は、単純な権限ミドルウェア定義の例です:

  1. ミドルウェア クラスを作成します:
    namespace appmiddleware;

use appmodelPermission;
use think acadeRequest;
use think acadeSession;
use thinkResponse;

class AuthMiddleware
{

public function handle(Request $request, Closure $next)
{
    // 获取当前请求的URL
    $url = $request->baseUrl();

    // 获取当前用户的角色信息
    $roles = Session::get('user.roles');

    // 获取当前角色拥有的权限
    $permissions = [];
    foreach ($roles as $role) {
        $rolePermissions = Permission::whereHas('roles', function ($query) use ($role) {
            $query->where('role_id', $role['id']);
        })->select();
        $permissions = array_merge($permissions, $rolePermissions->toArray());
    }

    // 验证权限
    foreach ($permissions as $permission) {
        if ($permission['name'] == $url) {
            return $next($request);
        }
    }

    // 没有权限,跳转到无权限页面
    return Response::create('您没有权限访问该页面!', 'html', 403);
}

}

  1. 登録ミドルウェア:
    us 権限ミドルウェアは、次のようにアプリケーションのミドルウェア構成ファイル (middleware.php) に登録できます。
    return [
    // ...
    ppmiddlewareAuthMiddleware::class,
    / / ...
    ];

4. 権限ミドルウェアの適用
ルーティング定義でミドルウェアを使用して権限検証を適用できます。以下はルート定義の例です:

use think acadeRoute;

Route::group('admin', function () {

// 需要验证权限的页面
Route::rule('user/index', 'admin/user/index')
    ->middleware('AuthMiddleware');
// ...
// 其他路由定义
// ...

})->middleware ( 'AuthMiddleware');

上記の例では、middleware('AuthMiddleware') メソッドを使用して権限ミドルウェアを適用し、ユーザー権限の検証と制御を実現します。

結論:
上記の手順により、ThinkPHP6 フレームワークでのユーザー権限の管理と制御を実現できます。モデルの関連付けとミドルウェアを使用すると、ユーザー、ロール、権限間の関係を簡単に実現でき、ミドルウェアを使用して権限の検証を実行し、ユーザーが制限されたページにアクセスしたときに傍受して処理できます。これにより、システム リソースのセキュリティが効果的に保護され、より優れたユーザー権限制御機能がシステムに提供されます。

以上がThinkPHP6 権限管理ガイド: ユーザー権限制御の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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