Heim  >  Artikel  >  PHP-Framework  >  So verwenden Sie die Auth-Autorisierung von ThinkPHP6

So verwenden Sie die Auth-Autorisierung von ThinkPHP6

PHPz
PHPzOriginal
2023-06-20 08:27:131391Durchsuche

ThinkPHP6 ist ein hervorragendes PHP-Framework, das uns viele effiziente Tools und Funktionen bietet. Unter diesen ist die Authentifizierung eine sehr leistungsstarke Funktion, die uns bei der Verwaltung von Berechtigungen in Anwendungen helfen kann. In diesem Artikel wird erläutert, wie Sie die Auth-Autorisierung von ThinkPHP6 verwenden.

  1. Installieren Sie die Auth-Komponente

Zuerst müssen wir die Auth-Komponente installieren. Führen Sie den folgenden Befehl im Terminal aus:

composer require topthink/think-auth

Nachdem die Installation abgeschlossen ist, müssen wir den Auth-Dienstanbieter in der Konfigurationsdatei hinzufügen:

// config/app.php

return [
    // ...
    'providers' => [
        // ...
        thinkuthServiceProvider::class,
    ],
];

Dann müssen wir den folgenden Befehl ausführen, um die Auth-Konfigurationsdatei zu generieren:

php think auth:config
  1. Konfigurieren Sie die Auth-Komponente

Die Auth-Komponente kann konfiguriert werden, um unterschiedliche Berechtigungsverwaltungsanforderungen zu erfüllen. Das Folgende ist eine Grundkonfiguration:

// config/auth.php

return [
    'auth_on' => true,
    'auth_type' => 1,
    'auth_group' => 'auth_group',
    'auth_group_access' => 'auth_group_access',
    'auth_rule' => 'auth_rule',
    'auth_user' => 'user',
];
  • auth_on: ob die Berechtigungsauthentifizierung aktiviert werden soll, true zum Aktivieren, false zum Schließen
  • auth_type: Authentifizierungsmethode, 1 ist Echtzeitauthentifizierung (das heißt, die Berechtigungen werden jedes Mal erneut angefordert, wenn die Berechtigungen überprüft werden), 2 ist die Anmeldeauthentifizierung (das heißt, die Berechtigungen werden überprüft, nachdem sich der Benutzer angemeldet hat); : Name der Benutzergruppendatentabelle;
  • auth_group_access: Name der detaillierten Zuordnungstabelle der Benutzergruppe;
  • auth_rule: Tabelle mit Berechtigungsregeln;
  • Berechtigungsregeln erstellen
    Bevor wir die Authentifizierung verwenden, müssen wir zunächst einige Berechtigungsregeln erstellen. Berechtigungsregeln können den Zugriff von Benutzern auf verschiedene Ressourcen steuern. Wir müssen eine auth_rule-Tabelle in der Datenbank erstellen und dann Berechtigungsregeln erstellen, indem wir Datensätze hinzufügen.
  1. // appmodelAuthRule.php
    
    namespace appmodel;
    
    use thinkModel;
    
    class AuthRule extends Model
    {
        //
    }
  2. Als nächstes müssen wir die auth_rule-Tabelle in der Datenbank erstellen:
CREATE TABLE `auth_rule` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL COMMENT '规则',
    `title` VARCHAR(100) NOT NULL COMMENT '规则名称',
    `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '规则类型',
    `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态',
    `condition` TEXT COMMENT '规则表达式',
    PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限规则表';

Dann können wir einige Berechtigungsregeln hinzufügen, indem wir:

use appmodelAuthRule;

$rule = new AuthRule;
$rule->name = 'admin/user/index';
$rule->title = '管理用户';
$rule->save();

$rule = new AuthRule;
$rule->name = 'admin/user/add';
$rule->title = '添加用户';
$rule->save();

$rule = new AuthRule;
$rule->name = 'admin/user/edit';
$rule->title = '编辑用户';
$rule->save();

$rule = new AuthRule;
$rule->name = 'admin/user/del';
$rule->title = '删除用户';
$rule->save();

Benutzergruppe erstellen

    Zusätzlich zu den Berechtigungsregeln müssen wir auch erstellen Benutzergruppe. Eine Benutzergruppe ist eine Sammlung von Benutzern mit denselben Zugriffsrechten. Wir müssen eine auth_group-Tabelle in der Datenbank erstellen und dann Benutzergruppen erstellen, indem wir Datensätze hinzufügen.
  1. // appmodelAuthGroup.php
    
    namespace appmodel;
    
    use thinkModel;
    
    class AuthGroup extends Model
    {
        //
    }
  2. Als nächstes müssen wir die auth_group-Tabelle in der Datenbank erstellen:
CREATE TABLE `auth_group` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(100) NOT NULL COMMENT '组名',
    `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态',
    PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户组表';

Dann können wir einige Benutzergruppen hinzufügen, indem wir:

use appmodelAuthGroup;

$group = new AuthGroup;
$group->title = '管理员';
$group->save();

$group = new AuthGroup;
$group->title = '普通用户';
$group->save();

Benutzergruppendetails erstellen

    Jetzt haben wir einige Berechtigungsregeln und Benutzer erstellt Gruppen. Als nächstes müssen wir die Regeln den Benutzergruppen zuweisen. Wir müssen eine auth_group_access-Tabelle in der Datenbank erstellen und dann Benutzergruppendetails erstellen, indem wir Datensätze hinzufügen.
  1. // appmodelAuthGroupAccess.php
    
    namespace appmodel;
    
    use thinkModel;
    
    class AuthGroupAccess extends Model
    {
        //
    }
  2. Als nächstes müssen wir die Tabelle auth_group_access in der Datenbank erstellen:
CREATE TABLE `auth_group_access` (
    `uid` INT NOT NULL COMMENT '用户id',
    `group_id` INT NOT NULL COMMENT '用户组id',
    UNIQUE KEY `uid_group_id` (`uid`, `group_id`),
    KEY `uid` (`uid`),
    KEY `group_id` (`group_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用户组明细表';

Anschließend können wir Benutzergruppen Berechtigungsregeln zuweisen über:

use appmodelAuthGroupAccess;

$access = new AuthGroupAccess;
$access->uid = 1;
$access->group_id = 1;
$access->save();

$access = new AuthGroupAccess;
$access->uid = 2;
$access->group_id = 2;
$access->save();

$access = new AuthGroupAccess;
$access->uid = 3;
$access->group_id = 2;
$access->save();

Autorisierung mit Auth

    Jetzt haben wir einige Berechtigungsregeln und Benutzer erstellt Gruppen erstellen und Benutzergruppen Regeln zuweisen. Als nächstes können wir mithilfe der Auth-Autorisierung überprüfen, ob der Benutzer über Zugriffsrechte verfügt.
  1. // 授权验证
    use thinkacadeSession;
    use thinkacadeRequest;
    use thinkacadeConfig;
    use thinkacadeDb;
    use thinkuthAuth;
    
    class BaseController extends Controller
    {
        protected function initialize()
        {
            parent::initialize();
    
            // 如果用户未登录,则跳转到登录页面
            if (!Session::has('user')) {
                $this->redirect('/login');
            }
    
            $uid = Session::get('user.id');
    
            // 如果是超级管理员,则直接通过权限验证
            if ($uid == Config::get('admin_id')) {
                return true;
            }
    
            $auth = new Auth;
            $route = strtolower(Request::controller() . '/' . Request::action());
            if (!$auth->check($route, $uid)) {
                $this->error('无权限');
            }
        }
    }
  2. Zuerst müssen wir die Benutzeranmeldeinformationen aus der Sitzung abrufen. Wenn der Benutzer nicht angemeldet ist, springen Sie zur Anmeldeseite.

Dann erhalten wir die UID des aktuellen Benutzers. Wenn der aktuelle Benutzer ein Superadministrator ist, wird die Berechtigungsüberprüfung direkt durchgeführt.

Andernfalls erstellen wir eine Auth-Instanz und erhalten die Route für die aktuelle Anfrage. Anschließend verwenden wir die Auth-Check-Methode, um zu überprüfen, ob der aktuelle Benutzer über Zugriffsrechte verfügt. Wenn nicht, wird ein Fehler „Keine Berechtigung“ ausgegeben.

Zusammenfassung

    In diesem Artikel haben wir gelernt, wie man die Auth-Autorisierung in ThinkPHP6 verwendet. Wir verwenden die Auth-Komponente, um die Berechtigungsverwaltung zu implementieren und einige Berechtigungsregeln und Benutzergruppen zu erstellen. Schließlich verwenden wir die Auth-Autorisierung, um zu überprüfen, ob der Benutzer über Zugriffsrechte verfügt. Wenn Sie erweiterte Berechtigungsverwaltungsfunktionen benötigen, können Sie dies durch die Erweiterung der Auth-Komponente erreichen.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Auth-Autorisierung von ThinkPHP6. 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