ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP6 を使用して権限制御を実装する方法

ThinkPHP6 を使用して権限制御を実装する方法

WBOY
WBOYオリジナル
2023-06-20 19:55:423252ブラウズ

インターネットがますます発展するにつれて、多くの Web サイトではユーザーのアクセス許可を制御する必要があります。アクセス許可制御により、システムのセキュリティを保護し、権限のないユーザーによるシステム リソースへのアクセスを防ぐことができます。これは商用アプリケーションでは非常に重要です。 PHP を使用してアプリケーションを開発する場合、ThinkPHP フレームワークはシンプルなソリューションを提供します。

ThinkPHP6 フレームワークは、RBAC (ロールベースのアクセス制御) に基づいた権限制御機能をユーザーに提供します。この記事では、権限の設定方法、コントローラーやビューでの権限の使用方法、権限制御情報をデータベースに保存する方法など、ThinkPHP6 を使用して権限制御を実装する方法を紹介します。

1. 基本概念

アクセス許可制御の実装方法を紹介する前に、いくつかの基本概念を理解する必要があります:

  1. ロール: は同じ機能を持ち、ユーザーは同じです承認管理を容易にするために、責任がロールに割り当てられます。
  2. 権限: ユーザーがシステム内でアクセスできるリソースと操作 (コントローラー、メソッド、ビューなど) を定義します。
  3. ロールと権限の関係: ロールを対応する権限に関連付けて、特定のロールを持つユーザーの承認管理を容易にします。

2. 権限の設定

  1. 権限の構成

ThinkPHP6 では、すべての権限の構成情報は appcontroller dmin.php に保存されます。ファイルの真ん中。構成ファイルには、パブリック アクセス許可とプライベート アクセス許可の 2 種類のアクセス許可があります。

パブリック権限とは、システムのホームページなど、すべてのユーザーがアクセスできるリソースと操作を指します。プライベート権限とは、特定の役割または権限を持つユーザーのみがアクセスできるリソースと操作を指します。

すべてのパブリック アクセス許可を appcontroller dmin.php ファイルに追加します:

return [
    // 公共权限
    'public' => [
        'index/index',
        'index/home'
    ],

    // 私有权限
    'private' => []
];
  1. プライベート アクセス許可を構成する

プライベート アクセス許可については、次のアクセス許可を追加する必要があります。 dmin.php ファイルのプライベート権限グループに追加します。

たとえば、AdminController コントローラーの getUserList メソッドへのアクセスを許可する「user」という名前の権限を追加できます:

// 私有权限
'private' => [
    'user' => [
        'AdminController/getUserList'
    ]
]

3. コントローラーとビューでの権限の使用

  1. 権限の確認
##特定の権限が必要なページにユーザーがアクセスするときは、ユーザーの権限を確認する必要があります。 ThinkPHP6 では、Auth クラスが提供する check メソッドを使用して、ユーザーが特定の権限を持っているかどうかを確認できます。

たとえば、次のメソッドを使用して、ユーザーが「user」という名前の権限を持っているかどうかを確認できます:

if (Auth::check('user')) {
    // 执行用户有权访问的操作
} else {
    // 返回无权访问页面
}

    現在のユーザーのロールを確認します
In 特定の操作を実行するときは、現在のユーザーの役割を理解し、その役割に基づいて適切に動作する必要があります。 ThinkPHP6 では、Auth クラスの getRole メソッドを使用して、現在のユーザーのロールを取得できます。

たとえば、次のメソッドを使用して現在のユーザーのロールを取得できます:

$role = Auth::getRole();

    ビューでのアクセス許可の使用
次のことができます。ビュー コントロールの権限を使用して、一部の要素を表示または非表示にすることもできます。たとえば、ブレード テンプレートでは、can ディレクティブを使用して、現在のユーザーが特定の権限を持っているかどうかを確認できます。

例:

<!-- 如果用户有'user'权限,则显示下面的按钮 -->
@can('user')
    <button type="button" class="btn btn-sm btn-primary">操作</button>
@endcan

4. 権限制御情報をデータベースに保存する

権限制御をより柔軟にするために、権限情報をデータベースに保存して管理を容易にすることができます。 . および修正。 ThinkPHP6 は、データベースから許可情報を簡単に読み取って検証できる Auth クラスを提供します。

データベースに権限を設定する場合、4 つのテーブルを作成する必要があります:

    ユーザー テーブル (ユーザー): ユーザー ID、ユーザー名、パスワードなどのユーザー情報を保存します。
  1. ロール テーブル (ロール): ロール ID やロール名などのロール情報を保存します。
  2. 権限テーブル (権限): 権限 ID や権限名などの権限情報を保存します。
  3. ロール権限テーブル (role_permission): ロールと権限の間の関係情報を格納します。
Auth クラスでは、次のメソッドを使用して検証用のテーブル名を設定します。

protected $table = [
    'auth' => 'auth',
    'users' => 'users',
    'roles' => 'roles',
    'permissions' => 'permissions',
    'role_permissions' => 'role_permission'
];

上記は、ThinkPHP6 を使用して権限制御を実装するプロセス全体です。以上の操作により、RBACベースの権限制御を簡単に実装することができ、プロジェクトのセキュリティと制御性を向上させることができます。

以上がThinkPHP6 を使用して権限制御を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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