Heim  >  Artikel  >  PHP-Framework  >  ThinkPHP6-Leitfaden zur Berechtigungsverwaltung: Implementieren der Benutzerberechtigungskontrolle

ThinkPHP6-Leitfaden zur Berechtigungsverwaltung: Implementieren der Benutzerberechtigungskontrolle

王林
王林Original
2023-08-13 18:09:072014Durchsuche

ThinkPHP6-Leitfaden zur Berechtigungsverwaltung: Implementieren der Benutzerberechtigungskontrolle

ThinkPHP6-Berechtigungsverwaltungshandbuch: Implementierung der Benutzerberechtigungskontrolle

Einführung:
In Webanwendungen ist die Berechtigungsverwaltung ein sehr wichtiger Bestandteil, der uns dabei helfen kann, die Zugriffs- und Betriebsberechtigungen der Benutzer auf Systemressourcen zu kontrollieren und die Systemsicherheit zu schützen . Im ThinkPHP6-Framework können wir seine leistungsstarken Berechtigungsverwaltungsfunktionen nutzen, um die Benutzerberechtigungskontrolle zu implementieren.

1. Erstellen Sie eine Datenbanktabelle
Bevor wir mit der Implementierung der Benutzerberechtigungssteuerung beginnen, müssen wir zunächst die entsprechende Datenbanktabelle erstellen, um Benutzer-, Rollen- und Berechtigungsinformationen zu speichern. Das Folgende ist die SQL-Anweisung zum Erstellen der Tabelle:

  1. Benutzertabelle (Benutzer):
    CREATE TABLE Benutzer (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. 角色表(role):
    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. 权限表(permission):
    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):
    CREATE TABLE user_role (
    user_id int(11) unsigned NOT NULL COMMENT '用户ID',
    role_id int(11) unsigned NOT NULL COMMENT '角色ID',
    PRIMARY KEY (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',
    PRIMARY KEY (role_id,permission_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色-权限关联表';

二、定义模型关联
在ThinkPHP6中,我们可以使用模型关联来建立用户、角色和权限之间的关系。以下是相应的模型定义:

  1. 用户模型(User.php):
    namespace appmodel;

use thinkModel;

class User extends Model
{

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

}

  1. 角色模型(Role.php):
    namespace appmodel;

use thinkModel;

class Role extends Model
{

// 角色-权限关联
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');
}

}

三、定义权限中间件
在ThinkPHP6中,我们可以使用中间件来统一处理用户权限的验证。以下是一个简单的权限中间件定义示例:

  1. 创建中间件类:
    namespace appmiddleware;

use appmodelPermission;
use thinkacadeRequest;
use thinkacadeSession;
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. 注册中间件:
    我们可以将权限中间件注册到应用的中间件配置文件(middleware.php)中,如下所示:
    return [
    // ...
    ppmiddlewareAuthMiddleware::class,
    // ...
    ];

四、应用权限中间件
我们可以通过在路由定义中使用中间件来应用权限验证。以下是一个示例路由定义:

use thinkacadeRoute;

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

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

})->middleware('AuthMiddleware');

在上述示例中,我们通过使用middleware('AuthMiddleware') id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Benutzer-ID',

Benutzername varchar(50) NICHT NULL KOMMENTAR 'Benutzername',

Passwort char(32) NICHT NULL KOMMENTAR 'Passwort',
PRIMÄRSCHLÜSSEL ( id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='User table';🎜Role table (role):🎜CREATE TABLE role (🎜 id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'role ID',🎜 name varchar(50) NOT NULL COMMENT 'role name',🎜 PRIMARY KEY (id)🎜) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='role table';🎜Permission table (permission): 🎜CREATE TABLE <code>permission (🎜 id code> int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Permission ID',🎜 <code>name varchar(50) NOT NULL COMMENT 'Permission name',🎜 PRIMARY KEY (id) 🎜) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Permission table';🎜Benutzer-Rollen-Zuordnungstabelle (user_role): 🎜CREATE TABLE user_role (🎜 user_id int (11) unsigned NOT NULL COMMENT 'User ID',🎜 role_id int (11) unsigned NOT NULL COMMENT 'Role ID',🎜 PRIMARY KEY (user_id, role_id)🎜) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Benutzer-Rollen-Zuordnungstabelle';🎜Rollen-Berechtigungs-Zuordnungstabelle (role_permission): 🎜CREATE TABLE role_permission code> (🎜 <code>role_id int(11) unsigned NOT NULL COMMENT 'role ID',🎜 permission_id int(11) unsigned NOT NULL COMMENT 'permission ID',🎜 PRIMARY KEY (role_id,permission_id)🎜) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Rollenberechtigungszuordnungstabelle';🎜2 Modellzuordnung 🎜In ThinkPHP6 können wir die Modellzuordnung verwenden, um die Beziehung zwischen Benutzern, Rollen und Berechtigungen herzustellen. Das Folgende ist die entsprechende Modelldefinition: 🎜🎜🎜Benutzermodell (User.php): 🎜namespace appmodel; 🎜use thinkModel; start="2">🎜Role Model (Role.php): 🎜namespace appmodel;🎜use thinkModel;🎜🎜class Role erweitert Model🎜{🎜rrreee🎜}🎜
    🎜Berechtigungsmodell (Permission.php): 🎜namespace appmodel;
🎜use thinkModel;🎜🎜class Permission erweitert Model🎜{🎜rrreee🎜}🎜🎜3. Definieren Sie Berechtigungs-Middleware🎜in ThinkPHP6 , Wir können Middleware verwenden, um die Überprüfung von Benutzerberechtigungen einheitlich durchzuführen. Das Folgende ist ein Beispiel für eine einfache Berechtigungs-Middleware-Definition: 🎜🎜🎜Erstellen Sie eine Middleware-Klasse: 🎜namespace appmiddleware;🎜use appmodelPermission;🎜use think acadeRequest;🎜use think acadeSession;🎜use thinkResponse; 🎜 🎜class AuthMiddleware🎜{🎜rrreee🎜}🎜
    🎜Registrieren Sie die Middleware: 🎜Wir können die Berechtigungs-Middleware wie folgt in der Middleware-Konfigurationsdatei der Anwendung (middleware.php) registrieren: 🎜 return [🎜 / / ...🎜 ppmiddlewareAuthMiddleware::class,🎜 // ...🎜];
🎜Vier. Anwendungsberechtigungs-Middleware🎜Wir können Middleware in Routendefinitionen verwenden, um die Berechtigungsüberprüfung anzuwenden. Hier ist ein Beispiel für eine Routendefinition: 🎜🎜use think acadeRoute;🎜🎜Route::group('admin', function () {🎜rrreee🎜})->middleware('AuthMiddleware');🎜🎜Im obigen Beispiel: Wir verwenden die Methode middleware('AuthMiddleware'), um Berechtigungs-Middleware anzuwenden, um Benutzerberechtigungen zu überprüfen und zu steuern. 🎜🎜Fazit: 🎜Durch die oben genannten Schritte können wir die Verwaltung und Kontrolle von Benutzerberechtigungen im ThinkPHP6-Framework realisieren. Mithilfe von Modellzuordnungen und Middleware können wir die Beziehung zwischen Benutzern, Rollen und Berechtigungen leicht erkennen und Middleware verwenden, um eine Berechtigungsüberprüfung durchzuführen und abzufangen und zu verarbeiten, wenn Benutzer auf eingeschränkte Seiten zugreifen. Dies kann die Sicherheit der Systemressourcen wirksam schützen und dem System bessere Funktionen zur Steuerung der Benutzerberechtigungen bieten. 🎜

Das obige ist der detaillierte Inhalt vonThinkPHP6-Leitfaden zur Berechtigungsverwaltung: Implementieren der Benutzerberechtigungskontrolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn