ThinkPHP6 権限管理ガイド: ユーザー権限制御の実装
はじめに:
Web アプリケーションでは、権限管理は非常に重要な部分であり、ユーザーの制御に役立ちます。 ' システム リソースへのアクセス権と操作権を付与し、システムのセキュリティを保護します。 ThinkPHP6 フレームワークでは、強力な権限管理機能を使用してユーザー権限制御を実装できます。
1. データベース テーブルを作成する
ユーザー権限制御の実装を開始する前に、まずユーザー、ロール、権限情報を保存するための対応するデータベース テーブルを作成する必要があります。テーブルを作成する SQL ステートメントは次のとおりです:
user
(id
int (11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ユーザー ID',username
varchar(50) NOT NULL COMMENT 'ユーザー名',password
char(32) NOT NULL COMMENT ' パスワード',id
)role
(id
int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ロール ID',name
varchar(50) NOT NULL COMMENT 'ロール名',id
)permission
(id
int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '権限 ID',name
varchar (50 ) NOT NULL COMMENT '権限名',id
)user_role
(user_id
int(11) unsigned NOT NULL COMMENT 'ユーザー ID', role_id
int(11) unsigned NOT NULL COMMENT 'ロール ID',user_id
,role_id
)role_permission
(role_id
int( 11) unsigned NOT NULL COMMENT 'ロール ID',permission_id
int(11) unsigned NOT NULL COMMENT '権限 ID',role_id
,permission_id
)2. モデルの関連付けを定義する
ThinkPHP6 では、次のように使用できます。モデル ユーザー、ロール、権限間の関係を確立するための関連付け。対応するモデル定義は次のとおりです:
use thinkModel;
classユーザーはモデルを拡張します
{
// 用户-角色关联 public function roles() { return $this->belongsToMany(Role::class, 'user_role'); }
}
use thinkModel;
class ロールはモデルを拡張します
{
// 角色-权限关联 public function permissions() { return $this->belongsToMany(Permission::class, 'role_permission'); }
}
use thinkModel;
class Permission extends Model
{
// 权限-角色关联 public function roles() { return $this->belongsToMany(Role::class, 'role_permission'); }
}
3. 権限ミドルウェアの定義
ThinkPHP6 では、ミドルウェアを使用できますユーザー権限の検証を統一的に処理します。以下は、単純な権限ミドルウェア定義の例です:
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); }
}
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 サイトの他の関連記事を参照してください。