Heim  >  Artikel  >  PHP-Framework  >  Best Practices für Laravel-Berechtigungsfunktionen: So steuern Sie Benutzerberechtigungen richtig

Best Practices für Laravel-Berechtigungsfunktionen: So steuern Sie Benutzerberechtigungen richtig

WBOY
WBOYOriginal
2023-11-02 12:32:03896Durchsuche

Best Practices für Laravel-Berechtigungsfunktionen: So steuern Sie Benutzerberechtigungen richtig

Best Practices für Laravel-Berechtigungsfunktionen: Zur korrekten 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 effizienterer Lösungen helfen sichere Webanwendungen. 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 dem Zugriff unbefugter Benutzer zu schützen. In diesem Artikel diskutieren wir Best Practices für die Berechtigungskontrolle in Laravel und stellen konkrete Codebeispiele bereit.

1. Installieren und richten Sie die Autorisierungsfunktion von Laravel ein

Zunächst müssen wir die Autorisierungsfunktion in Laravel installieren und einrichten. Wir können die integrierten Befehle von Laravel verwenden, um diese Aufgabe zu erfüllen. Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:

composer require laravel/ui
php artisan ui bootstrap --auth

Der obige Befehl installiert das Benutzeroberflächenpaket von Laravel und generiert einen grundlegenden Authentifizierungs- und Registrierungscontroller.

Als nächstes müssen wir eine Tabelle mit dem Namen roles in der Datenbank erstellen, um Benutzerrolleninformationen zu speichern. Um diese Aufgabe zu erfüllen, können wir das von Laravel bereitgestellte Migrationstool verwenden. Führen Sie den folgenden Befehl aus: roles 的表,以保存用户角色的信息。我们可以使用Laravel提供的迁移工具来完成这个任务。运行以下命令:

php artisan make:migration create_roles_table --create=roles

运行上述命令后,Laravel 将在 database/migrations 文件夹中生成一个新的迁移文件。打开该文件并更新 up 方法,如下所示:

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

class CreateRolesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name')->unique();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('roles');
    }
}

保存并关闭文件后,运行以下命令来执行迁移文件:

php artisan migrate

现在,我们已经完成了 Laravel 的授权功能的设置。

二、定义用户和角色模型

接下来,我们需要定义用户和角色模型,并在它们之间建立关系。

首先,我们需要创建一个 Role 模型。运行以下命令来生成模型文件:

php artisan make:model Role

接下来,我们需要在 Role 模型中添加与用户的关联。打开 app/Role.php 文件并将以下代码添加到类中:

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

接下来,我们需要创建 User 模型。运行以下命令来生成模型文件:

php artisan make:model User

然后,我们需要在 User 模型中添加与角色的关联。打开 app/User.php 文件并将以下代码添加到类中:

public function role()
{
    return $this->belongsTo(Role::class);
}

保存并关闭文件后,在 terminal 中运行以下命令来确保 User 模型与 users 数据表进行关联:

composer dump-autoload

我们已经成功定义了用户和角色模型,并建立了它们之间的关系。

三、定义用户访问控制方法

现在,我们需要定义一些用户访问控制方法,以便在应用程序中进行权限检查。

首先,我们需要定义一个 hasPermission 方法来检查用户是否具有特定的权限。打开 app/User.php 文件,并在 User 类中添加以下方法:

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

接下来,我们需要定义一个 role 方法来检查用户的角色。打开 app/User.php 文件,并在 User 类中添加以下方法:

public function role()
{
    return $this->belongsTo(Role::class);
}

保存并关闭文件后,我们已经成功定义了用于用户访问控制的方法。

四、定义角色和权限模型

接下来,我们需要定义角色和权限模型,并在它们之间建立关系。

首先,我们需要创建一个 Permission 模型。运行以下命令来生成模型文件:

php artisan make:model Permission

接下来,我们需要在 Permission 模型中添加与角色的关联。打开 app/Permission.php 文件并将以下代码添加到类中:

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

接下来,我们需要创建一个 Role 模型。运行以下命令来生成模型文件:

php artisan make:model Role

然后,我们需要在 Role 模型中添加与权限的关联。打开 app/Role.php 文件并将以下代码添加到类中:

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

保存并关闭文件后,运行以下命令来确保模型与对应的数据表进行关联:

composer dump-autoload

我们已经成功定义了角色和权限模型,并建立了它们之间的关系。

五、定义访问控制中间件

最后,我们需要定义一个访问控制中间件,以便在访问受限制的路由时进行权限检查。

首先,我们需要在 app/Http/Kernel.php 文件中注册中间件。打开文件并将以下代码添加到 routeMiddleware 数组中:

'permission' => AppHttpMiddlewarePermissionMiddleware::class,

接下来,我们需要创建一个 PermissionMiddleware 类。运行以下命令来生成类文件:

php artisan make:middleware PermissionMiddleware

然后,我们需要在 PermissionMiddleware 中间件类中实现逻辑来进行权限检查。打开 app/Http/Middleware/PermissionMiddleware.php

public function handle($request, Closure $next, $permission)
{
    $user = Auth::user();

    if (!$user->hasPermission($permission)) {
        abort(403, 'Unauthorized');
    }

    return $next($request);
}

Nachdem Sie den obigen Befehl ausgeführt haben, generiert Laravel eine neue Migrationsdatei im Ordner database/migrations. Öffnen Sie die Datei und aktualisieren Sie die up-Methode wie folgt: 🎜rrreee🎜Nachdem Sie die Datei gespeichert und geschlossen haben, führen Sie den folgenden Befehl aus, um die Migrationsdatei auszuführen: 🎜rrreee🎜Jetzt haben wir die Autorisierungsfunktion von abgeschlossen Laravel eingerichtet. 🎜🎜2. Benutzer und Vorbilder definieren🎜🎜Als nächstes müssen wir Benutzer und Vorbilder definieren und Beziehungen zwischen ihnen herstellen. 🎜🎜Zuerst müssen wir ein Rollenmodell erstellen. Führen Sie den folgenden Befehl aus, um die Modelldatei zu generieren: 🎜rrreee🎜 Als nächstes müssen wir die Zuordnung mit dem Benutzer im Role-Modell hinzufügen. Öffnen Sie die Datei app/Role.php und fügen Sie der Klasse den folgenden Code hinzu: 🎜rrreee🎜Als nächstes müssen wir das Modell Benutzer erstellen. Führen Sie den folgenden Befehl aus, um die Modelldatei zu generieren: 🎜rrreee🎜 Dann müssen wir die Zuordnung zur Rolle im Benutzer-Modell hinzufügen. Öffnen Sie die Datei app/User.php und fügen Sie der Klasse den folgenden Code hinzu: 🎜rrreee🎜Führen Sie nach dem Speichern und Schließen der Datei den folgenden Befehl im Terminal aus, um sicherzustellen, dass der Benutzer-Modell stimmt mit der zuzuordnenden Datentabelle <code>users überein: 🎜rrreee🎜Wir haben die Benutzer- und Rollenmodelle erfolgreich definiert und die Beziehung zwischen ihnen hergestellt. 🎜🎜3. Benutzerzugriffskontrollmethoden definieren 🎜🎜Jetzt müssen wir einige Benutzerzugriffskontrollmethoden für die Berechtigungsprüfung in der Anwendung definieren. 🎜🎜Zuerst müssen wir eine hasPermission-Methode definieren, um zu prüfen, ob der Benutzer über bestimmte Berechtigungen verfügt. Öffnen Sie die Datei app/User.php und fügen Sie die folgende Methode in der Klasse User hinzu: 🎜rrreee🎜Als nächstes müssen wir eine Rolle definieren Methode zur Überprüfung der Rolle des Benutzers. Öffnen Sie die Datei app/User.php und fügen Sie die folgende Methode in der Klasse User hinzu: 🎜rrreee🎜Nach dem Speichern und Schließen der Datei haben wir die Benutzerzugriffskontrolle erfolgreich definiert Verfahren. 🎜🎜4. Rollen und Berechtigungsmodelle definieren🎜🎜Als nächstes müssen wir Rollen und Berechtigungsmodelle definieren und Beziehungen zwischen ihnen herstellen. 🎜🎜Zuerst müssen wir ein Berechtigungsmodell erstellen. Führen Sie den folgenden Befehl aus, um die Modelldatei zu generieren: 🎜rrreee🎜 Als nächstes müssen wir die Zuordnung zur Rolle im Permission-Modell hinzufügen. Öffnen Sie die Datei app/Permission.php und fügen Sie der Klasse den folgenden Code hinzu: 🎜rrreee🎜Als nächstes müssen wir ein Role-Modell erstellen. Führen Sie den folgenden Befehl aus, um die Modelldatei zu generieren: 🎜rrreee🎜 Dann müssen wir die Zuordnung mit den Berechtigungen im Role-Modell hinzufügen. Öffnen Sie die Datei app/Role.php und fügen Sie der Klasse den folgenden Code hinzu: 🎜rrreee🎜Führen Sie nach dem Speichern und Schließen der Datei den folgenden Befehl aus, um sicherzustellen, dass das Modell mit der entsprechenden Datentabelle verknüpft ist : 🎜rrreee🎜us Die Rollen- und Berechtigungsmodelle wurden erfolgreich definiert und die Beziehungen zwischen ihnen hergestellt. 🎜🎜5. Definieren Sie die Zugriffskontroll-Middleware🎜🎜Abschließend müssen wir eine Zugriffskontroll-Middleware definieren, um Berechtigungsprüfungen beim Zugriff auf eingeschränkte Routen durchzuführen. 🎜🎜Zuerst müssen wir die Middleware in der Datei app/Http/Kernel.php registrieren. Öffnen Sie die Datei und fügen Sie den folgenden Code zum Array routeMiddleware hinzu: 🎜rrreee🎜Als nächstes müssen wir eine Klasse PermissionMiddleware erstellen. Führen Sie den folgenden Befehl aus, um die Klassendatei zu generieren: 🎜rrreee🎜 Dann müssen wir die Logik in der Middleware-Klasse PermissionMiddleware für die Berechtigungsprüfung implementieren. Öffnen Sie die Datei app/Http/Middleware/PermissionMiddleware.php und fügen Sie der Klasse den folgenden Code hinzu: 🎜
public function handle($request, Closure $next, $permission)
{
    $user = Auth::user();

    if (!$user->hasPermission($permission)) {
        abort(403, 'Unauthorized');
    }

    return $next($request);
}

以上代码会检查当前用户是否具有特定的权限。如果用户没有该权限,则会返回 HTTP 403 状态码。

保存并关闭文件后,我们已经成功定义了访问控制中间件。

结束语:

通过本文中的步骤,我们已经了解了 Laravel 中权限控制的最佳实践,以及如何正确控制用户权限。我们在代码示例中演示了如何安装和设置 Laravel 的授权功能,定义用户和角色模型,访问控制方法,角色和权限模型,以及访问控制中间件的实现。

通过正确实现权限控制,我们可以保护敏感数据和功能,并根据用户角色和权限来限制其对应用程序中不同部分的访问。这不仅可以增加应用程序的安全性,还可以提供更好的用户体验。

希望本文能够帮助您理解 Laravel 中权限控制的最佳实践,以及如何正确控制用户权限。通过合理应用这些技术,您可以开发出更安全和高效的Web应用程序。

Das obige ist der detaillierte Inhalt vonBest Practices für Laravel-Berechtigungsfunktionen: So steuern Sie Benutzerberechtigungen richtig. 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