Heim PHP-Framework Swoole So verwenden Sie das Hyperf-Framework zur Berechtigungskontrolle

So verwenden Sie das Hyperf-Framework zur Berechtigungskontrolle

Oct 20, 2023 pm 01:46 PM
权限控制 Hyperf-Framework

So verwenden Sie das Hyperf-Framework zur Berechtigungskontrolle

So verwenden Sie das Hyperf-Framework zur Berechtigungssteuerung

Einführung:
Bei der Entwicklung einer Anwendung ist es häufig erforderlich, Berechtigungssteuerungsfunktionen zu implementieren, um Benutzern unterschiedliche Berechtigungen in verschiedenen Rollen zu erteilen. Das Hyperf-Framework ist ein leistungsstarkes PHP-Microservices-Framework, das viele leistungsstarke Funktionen und Erweiterungen bietet, einschließlich einer flexiblen Berechtigungssteuerung. In diesem Artikel untersuchen wir, wie das Hyperf-Framework zum Implementieren der Berechtigungskontrolle verwendet wird, und stellen spezifische Codebeispiele bereit.

1. Erstellen Sie eine Berechtigungstabelle
Zuerst müssen wir eine Berechtigungstabelle erstellen, um verschiedene Berechtigungsinformationen zu speichern. Datenbanktabellen können über die Datenmigrationsfunktion von Hyperf erstellt werden. Führen Sie den folgenden Befehl im Terminal aus, um die Migrationsdatei zu generieren:

php bin/hyperf.php gen:migration create_permissions_table
Nach dem Login kopieren

Fügen Sie dann den folgenden Inhalt in die generierte Migrationsdatei ein:

<?php

use HyperfDatabaseSchemaSchema;
use HyperfDatabaseSchemaBlueprint;
use HyperfDatabaseMigrationsMigration;
use HyperfDbConnectionDb;

class CreatetPermissionsTable extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        $tableName = 'permissions';
        $exists = Db::table('information_schema.TABLES')
            ->where('TABLE_SCHEMA', config('databases.default.dbname'))
            ->where('TABLE_NAME', $tableName)
            ->first();

        if (!$exists) {
            Schema::create($tableName, function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('name')->unique()->comment('权限名称');
                $table->string('guard_name')->default('web')->comment('守卫名称');
                $table->timestamps();
            });
        }
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('permissions');
    }
}
Nach dem Login kopieren

Als nächstes müssen wir die Hauptkonfigurationsdatei des Projekts config/autoload/ hinzufügen. Berechtigungen.php< /code> Fügen Sie den folgenden Inhalt hinzu: <code>config/autoload/permissions.php中添加以下内容:

<?php

return [
    'default' => [
        'guard_name' => 'web',
        'permissions' => [
            // 在这里添加你的权限
            'create_post',
            'edit_post',
            'delete_post',
            // ...
        ],
    ],
];
Nach dem Login kopieren

然后在命令行中运行以下命令执行数据库迁移:

php bin/hyperf.php migrate
Nach dem Login kopieren

二、定义用户角色模型
在Hyperf框架中,我们需要定义一个用户模型,该模型用于管理用户的角色和权限。我们可以通过继承HyperfDatabaseModelModel类来创建一个用户模型。在终端中执行以下命令来生成用户模型:

php bin/hyperf.php gen:model User
Nach dem Login kopieren

然后在生成的用户模型文件中添加以下代码:

namespace AppModel;

use HyperfDbConnectionModelModel;
use HyperfUtilsApplicationContext;

class User extends Model
{
    protected $guarded = [];

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }

    public function hasPermission($permission)
    {
        foreach ($this->roles as $role) {
            if ($role->hasPermission($permission)) {
                return true;
            }
        }
        return false;
    }

    public function givePermission($permission)
    {
        $permissionModel = Permission::where('name', $permission)->first();
        if (!$permissionModel) {
            throw new Exception("Permission {$permission} does not exist.");
        }
        $this->permissions()->sync($permissionModel, false);
    }

    public function revokePermission($permission)
    {
        $permissionModel = Permission::where('name', $permission)->first();
        if (!$permissionModel) {
            throw new Exception("Permission {$permission} does not exist.");
        }
        $this->permissions()->detach($permissionModel);
    }

    public function permissions()
    {
        return $this->belongsToMany(Permission::class, 'user_permissions');
    }
}
Nach dem Login kopieren

三、定义角色模型
在Hyperf框架中,我们也需要定义一个角色模型,该模型用于管理角色和权限。同样,我们可以通过继承HyperfDatabaseModelModel类来创建一个角色模型。在终端中执行以下命令来生成角色模型:

php bin/hyperf.php gen:model Role
Nach dem Login kopieren

然后在生成的角色模型文件中添加以下代码:

namespace AppModel;

use HyperfDbConnectionModelModel;

class Role extends Model
{
    protected $guarded = [];

    public function users()
    {
        return $this->belongsToMany(User::class);
    }

    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }

    public function hasPermission($permission)
    {
        return $this->permissions->contains('name', $permission);
    }

    public function givePermission($permission)
    {
        $permissionModel = Permission::where('name', $permission)->first();
        if (!$permissionModel) {
            throw new Exception("Permission {$permission} does not exist.");
        }
        $this->permissions()->sync($permissionModel, false);
    }

    public function revokePermission($permission)
    {
        $permissionModel = Permission::where('name', $permission)->first();
        if (!$permissionModel) {
            throw new Exception("Permission {$permission} does not exist.");
        }
        $this->permissions()->detach($permissionModel);
    }
}
Nach dem Login kopieren

四、定义权限模型
在Hyperf框架中,我们还需要定义一个权限模型,该模型用于管理权限信息。同样地,我们可以通过继承HyperfDatabaseModelModel类来创建一个权限模型。在终端中执行以下命令来生成权限模型:

php bin/hyperf.php gen:model Permission
Nach dem Login kopieren

然后在生成的权限模型文件中添加以下代码:

namespace AppModel;

use HyperfDbConnectionModelModel;

class Permission extends Model
{
    protected $guarded = [];

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}
Nach dem Login kopieren

五、定义权限中间件
接下来,我们需要创建一个权限中间件,用于检查用户是否有足够的权限访问某个路由。在终端中执行以下命令来生成中间件:

php bin/hyperf.php gen:middleware PermissionMiddleware
Nach dem Login kopieren

然后在生成的中间件文件中添加以下代码:

namespace AppMiddleware;

use HyperfHttpMessageStreamSwooleStream;
use HyperfHttpServerContractRequestInterface;
use HyperfUtilsContext;
use PsrContainerContainerInterface;
use PsrHttpMessageResponseInterface;
use PsrHttpServerMiddlewareInterface;
use PsrHttpServerRequestHandlerInterface;

class PermissionMiddleware implements MiddlewareInterface
{
    protected $container;

    protected $request;

    public function __construct(ContainerInterface $container, RequestInterface $request)
    {
        $this->container = $container;
        $this->request = $request;
    }

    public function process($request, RequestHandlerInterface $handler): ResponseInterface
    {
        $user = $this->request->getAttribute('user');
        $permissions = $this->request->route->permission;

        if ($user && $user->hasPermission($permissions)) {
            return $handler->handle($request);
        }

        return $this->response(403, 'Forbidden');
    }

    protected function response($code, $message)
    {
        $data = [
            'code' => $code,
            'message' => $message,
        ];

        return Context::get(ResponseInterface::class)->withBody(new SwooleStream(json_encode($data)));
    }
}
Nach dem Login kopieren

六、使用权限中间件
在路由定义中,我们可以通过使用->middleware('permission:xxx')

php bin/hyperf.php gen:controller PermissionController
Nach dem Login kopieren

Führen Sie dann den folgenden Befehl in der Befehlszeile aus, um die Datenbankmigration durchzuführen:

namespace AppController;

use AppMiddlewarePermissionMiddleware;
use HyperfHttpServerAnnotationController;
use HyperfHttpServerAnnotationMiddleware;
use HyperfHttpServerAnnotationRequestMapping;

/**
 * @Controller
 * @Middleware(PermissionMiddleware::class)
 */
class PermissionController
{
    /**
     * @RequestMapping(path="/permission", methods="get")
     * @Middleware("permission:create_post")
     */
    public function createPost()
    {
        // 处理创建文章的逻辑
    }

    /**
     * @RequestMapping(path="/permission", methods="get")
     * @Middleware("permission:edit_post")
     */
    public function editPost()
    {
        // 处理编辑文章的逻辑
    }

    /**
     * @RequestMapping(path="/permission", methods="get")
     * @Middleware("permission:delete_post")
     */
    public function deletePost()
    {
        // 处理删除文章的逻辑
    }
}
Nach dem Login kopieren

2. Definieren Sie das Benutzerrollenmodell

Im Hyperf-Framework müssen wir a definieren Benutzermodell, das zur Verwaltung von Benutzerrollen und -berechtigungen verwendet wird. Wir können ein Benutzermodell erstellen, indem wir die Klasse HyperfDatabaseModelModel erben. Führen Sie den folgenden Befehl im Terminal aus, um das Benutzermodell zu generieren:

$user = User::find(1);

if ($user->hasPermission('edit_post')) {
    // 给用户权限来编辑文章
} else {
    // 权限不足
}
Nach dem Login kopieren
Fügen Sie dann den folgenden Code in die generierte Benutzermodelldatei ein:

rrreee
3. Definieren Sie das Rollenmodell

Im Hyperf-Framework müssen wir auch eine Rolle definieren Modell. Wird zum Verwalten von Rollen und Berechtigungen verwendet. Ebenso können wir ein Rollenmodell erstellen, indem wir die Klasse HyperfDatabaseModelModel erben. Führen Sie im Terminal den folgenden Befehl aus, um das Rollenmodell zu generieren: 🎜rrreee🎜 Fügen Sie dann den folgenden Code in die generierte Rollenmodelldatei ein: 🎜rrreee🎜 4. Definieren Sie das Berechtigungsmodell 🎜 Im Hyperf-Framework müssen wir auch eine Berechtigung definieren Modell. Wird zum Verwalten von Berechtigungsinformationen verwendet. Ebenso können wir ein Berechtigungsmodell erstellen, indem wir die Klasse HyperfDatabaseModelModel erben. Führen Sie den folgenden Befehl im Terminal aus, um das Berechtigungsmodell zu generieren: 🎜rrreee🎜 Fügen Sie dann den folgenden Code in die generierte Berechtigungsmodelldatei ein: 🎜rrreee🎜 5. Berechtigungs-Middleware definieren 🎜 Als nächstes müssen wir eine Berechtigungs-Middleware erstellen, um zu überprüfen, ob die Der Benutzer verfügt über ausreichende Berechtigungen, um auf eine bestimmte Route zuzugreifen. Führen Sie den folgenden Befehl im Terminal aus, um die Middleware zu generieren: 🎜rrreee🎜 Fügen Sie dann den folgenden Code in die generierte Middleware-Datei ein: 🎜rrreee🎜 6. Berechtigungs-Middleware verwenden 🎜 In der Routendefinition können wir -&gt ;middleware verwenden ('permission:xxx'), um die entsprechende Berechtigungs-Middleware für das Routing festzulegen. Führen Sie den folgenden Befehl im Terminal aus, um die Routing-Datei zu generieren: 🎜rrreee🎜 Fügen Sie dann den folgenden Code in die generierte Routing-Datei ein: 🎜rrreee🎜 7. Anwendungsbeispiele 🎜 Wo eine Berechtigungskontrolle erforderlich ist, können wir überprüfen, ob sich der Benutzer im befindet Gehen Sie wie folgt vor: Sie verfügen über ausreichende Berechtigungen: 🎜rrreee🎜 8. Zusammenfassung🎜In diesem Artikel werden die detaillierten Schritte zur Verwendung des Hyperf-Frameworks zur Berechtigungssteuerung vorgestellt und spezifische Codebeispiele bereitgestellt. Mithilfe der vom Hyperf-Framework bereitgestellten Berechtigungsverwaltungsfunktionen können wir problemlos flexible Berechtigungskontrollfunktionen für unsere Anwendungen implementieren. Ich hoffe, dieser Artikel ist hilfreich für Sie, vielen Dank fürs Lesen! 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Hyperf-Framework zur Berechtigungskontrolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie Berechtigungskontrolle und Benutzerverwaltung in Uniapp So implementieren Sie Berechtigungskontrolle und Benutzerverwaltung in Uniapp Oct 20, 2023 am 11:15 AM

So implementieren Sie Berechtigungskontrolle und Benutzerverwaltung in uniapp Mit der Entwicklung mobiler Anwendungen sind Berechtigungskontrolle und Benutzerverwaltung zu einem wichtigen Bestandteil der Anwendungsentwicklung geworden. In uniapp können wir einige praktische Methoden verwenden, um diese beiden Funktionen zu implementieren und die Sicherheit und Benutzererfahrung der Anwendung zu verbessern. In diesem Artikel wird die Implementierung der Berechtigungskontrolle und Benutzerverwaltung in uniapp vorgestellt und einige spezifische Codebeispiele als Referenz bereitgestellt. 1. Berechtigungskontrolle Unter Berechtigungskontrolle versteht man das Festlegen unterschiedlicher Betriebsberechtigungen für verschiedene Benutzer oder Benutzergruppen in einer Anwendung, um die Anwendung zu schützen.

So verwenden Sie das Hyperf-Framework für die Codeanalyse So verwenden Sie das Hyperf-Framework für die Codeanalyse Oct 25, 2023 am 11:12 AM

Für die Verwendung des Hyperf-Frameworks zur Codeanalyse sind spezifische Codebeispiele erforderlich. Einführung: Im Softwareentwicklungsprozess müssen Qualität und Leistung des Codes ordnungsgemäß analysiert und bewertet werden. Als leistungsstarkes PHP-Entwicklungsframework bietet das Hyperf-Framework eine Fülle von Tools und Funktionen, die Entwicklern bei der Codeanalyse helfen. In diesem Artikel wird die Verwendung des Hyperf-Frameworks für die Codeanalyse vorgestellt und anhand spezifischer Codebeispiele veranschaulicht. 1. Auswahl von Code-Analyse-Tools Das Hyperf-Framework bietet einige praktische Tools.

So verwenden Sie das Hyperf-Framework für die domänenübergreifende Anforderungsverarbeitung So verwenden Sie das Hyperf-Framework für die domänenübergreifende Anforderungsverarbeitung Oct 20, 2023 pm 01:09 PM

So verwenden Sie das Hyperf-Framework für die domänenübergreifende Anforderungsverarbeitung. Einführung: In der modernen Netzwerkanwendungsentwicklung sind domänenübergreifende Anforderungen zu einer häufigen Anforderung geworden. Um die Trennung von Front-End- und Back-End-Entwicklung sicherzustellen und das Benutzererlebnis zu verbessern, ist es besonders wichtig geworden, das Hyperf-Framework für die domänenübergreifende Anforderungsverarbeitung zu verwenden. In diesem Artikel wird die Verwendung des Hyperf-Frameworks für die domänenübergreifende Anforderungsverarbeitung vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Was ist eine domänenübergreifende Anfrage? Domänenübergreifende Anfragen beziehen sich auf JavaScript, das über XMLHttpReques im Browser ausgeführt wird.

So verwenden Sie das Hyperf-Framework zur Flusskontrolle So verwenden Sie das Hyperf-Framework zur Flusskontrolle Oct 20, 2023 pm 05:52 PM

So verwenden Sie das Hyperf-Framework für die Flusskontrolle. Einführung: In der tatsächlichen Entwicklung ist eine angemessene Flusskontrolle für Systeme mit hoher Parallelität sehr wichtig. Die Flusskontrolle kann uns helfen, das System vor der Gefahr einer Überlastung zu schützen und die Systemstabilität und -leistung zu verbessern. In diesem Artikel stellen wir die Verwendung des Hyperf-Frameworks zur Flusskontrolle vor und stellen spezifische Codebeispiele bereit. 1. Was ist Flusskontrolle? Unter Verkehrskontrolle versteht man die Verwaltung und Einschränkung des Systemzugriffsverkehrs, um sicherzustellen, dass das System bei der Verarbeitung großer Verkehrsanforderungen normal funktionieren kann. fließen

So verwenden Sie das Hyperf-Framework für die Dateispeicherung So verwenden Sie das Hyperf-Framework für die Dateispeicherung Oct 25, 2023 pm 12:34 PM

Für die Verwendung des Hyperf-Frameworks zur Dateispeicherung sind spezifische Codebeispiele erforderlich. Hyperf ist ein leistungsstarkes PHP-Framework, das auf der Basis der Swoole-Erweiterung entwickelt wurde. Es verfügt über leistungsstarke Funktionen wie Coroutinen, Abhängigkeitsinjektion, AOP, Middleware und Ereignisverwaltung Geeignet für den Aufbau leistungsstarker, flexibler und skalierbarer Webanwendungen und Microservices. In tatsächlichen Projekten müssen wir häufig Dateien speichern und verwalten. Das Hyperf-Framework bietet einige praktische Komponenten und Tools, die uns helfen, Dateispeichervorgänge zu vereinfachen. In diesem Artikel wird die Verwendung vorgestellt

Benutzerverwaltung und Berechtigungskontrolle in Laravel: Implementierung mehrerer Benutzer und Rollenzuweisungen Benutzerverwaltung und Berechtigungskontrolle in Laravel: Implementierung mehrerer Benutzer und Rollenzuweisungen Aug 12, 2023 pm 02:57 PM

Benutzerverwaltung und Berechtigungskontrolle in Laravel: Mehrbenutzer- und Rollenzuweisung implementieren Einführung: In modernen Webanwendungen gehören Benutzerverwaltung und Berechtigungskontrolle zu den sehr wichtigen Funktionen. Laravel bietet als beliebtes PHP-Framework leistungsstarke und flexible Tools zur Implementierung der Berechtigungskontrolle für mehrere Benutzer und Rollenzuweisungen. In diesem Artikel wird erläutert, wie Benutzerverwaltungs- und Berechtigungskontrollfunktionen in Laravel implementiert werden, und relevante Codebeispiele bereitgestellt. 1. Installation und Konfiguration Implementieren Sie zunächst die Benutzerverwaltung in Laravel

Best Practices für Laravel-Berechtigungsfunktionen: So steuern Sie Benutzerberechtigungen richtig Best Practices für Laravel-Berechtigungsfunktionen: So steuern Sie Benutzerberechtigungen richtig Nov 02, 2023 pm 12:32 PM

Best Practices für Laravel-Berechtigungsfunktionen: Für die korrekte Steuerung von Benutzerberechtigungen sind spezifische Codebeispiele erforderlich. Einführung: Laravel ist ein sehr leistungsstarkes und beliebtes PHP-Framework, das viele Funktionen und Tools bereitstellt, die uns bei der Entwicklung effizienter und sicherer Webanwendungen unterstützen. Eine wichtige Funktion ist die Berechtigungskontrolle, die den Benutzerzugriff auf verschiedene Teile der Anwendung basierend auf seinen Rollen und Berechtigungen einschränkt. Eine ordnungsgemäße Berechtigungskontrolle ist eine Schlüsselkomponente jeder Webanwendung, um sensible Daten und Funktionen vor unbefugtem Zugriff zu schützen

So verwenden Sie das Hyperf-Framework für die Protokollverwaltung So verwenden Sie das Hyperf-Framework für die Protokollverwaltung Oct 25, 2023 am 09:15 AM

So verwenden Sie das Hyperf-Framework für die Protokollverwaltung. Einführung: Hyerpf ist ein leistungsstarkes, äußerst flexibles Coroutine-Framework auf Basis der PHP-Sprache mit umfangreichen Komponenten und Funktionen. Die Protokollverwaltung ist ein wesentlicher Bestandteil jedes Projekts. In diesem Artikel wird die Verwendung des Hyperf-Frameworks für die Protokollverwaltung vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Installieren Sie das Hyperf-Framework. Zuerst müssen wir das Hyperf-Framework installieren. Es kann über Composer installiert werden, öffnen Sie das Befehlszeilentool und geben Sie den folgenden Befehl ein

See all articles