Maison cadre php Laravel Meilleures pratiques pour les fonctionnalités d'autorisations de Laravel : comment contrôler correctement les autorisations des utilisateurs

Meilleures pratiques pour les fonctionnalités d'autorisations de Laravel : comment contrôler correctement les autorisations des utilisateurs

Nov 02, 2023 pm 12:32 PM
laravel 最佳实践 权限控制

Meilleures pratiques pour les fonctionnalités dautorisations de Laravel : comment contrôler correctement les autorisations des utilisateurs

Bonnes pratiques pour les fonctions d'autorisation de Laravel : Comment contrôler correctement les autorisations des utilisateurs, des exemples de code spécifiques sont requis

Introduction :

Laravel est un framework PHP très puissant et populaire qui fournit de nombreuses fonctions et outils pour nous aider à développer des fonctionnalités efficaces et applications Web sécurisées. Une fonctionnalité importante est le contrôle des autorisations, qui restreint l'accès des utilisateurs à différentes parties de l'application en fonction de leurs rôles et autorisations.

Un contrôle approprié des autorisations est un élément clé de toute application Web pour protéger les données et fonctionnalités sensibles contre l'accès par des utilisateurs non autorisés. Dans cet article, nous discuterons des meilleures pratiques en matière de contrôle des autorisations dans Laravel et fournirons des exemples de code concrets.

1. Installez et configurez la fonction d'autorisation de Laravel

Tout d'abord, nous devons installer et configurer la fonction d'autorisation dans Laravel. Nous pouvons utiliser les commandes intégrées de Laravel pour accomplir cette tâche. Ouvrez un terminal et exécutez la commande suivante :

composer require laravel/ui
php artisan ui bootstrap --auth
Copier après la connexion

La commande ci-dessus installera le pack d'interface utilisateur de Laravel et générera un contrôleur d'authentification et d'enregistrement de base.

Ensuite, nous devons créer une table nommée roles dans la base de données pour enregistrer les informations sur le rôle de l'utilisateur. Nous pouvons utiliser l'outil de migration fourni par Laravel pour accomplir cette tâche. Exécutez la commande suivante : roles 的表,以保存用户角色的信息。我们可以使用Laravel提供的迁移工具来完成这个任务。运行以下命令:

php artisan make:migration create_roles_table --create=roles
Copier après la connexion

运行上述命令后,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');
    }
}
Copier après la connexion

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

php artisan migrate
Copier après la connexion

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

二、定义用户和角色模型

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

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

php artisan make:model Role
Copier après la connexion
Copier après la connexion

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

public function users()
{
    return $this->hasMany(User::class);
}
Copier après la connexion

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

php artisan make:model User
Copier après la connexion

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

public function role()
{
    return $this->belongsTo(Role::class);
}
Copier après la connexion
Copier après la connexion

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

composer dump-autoload
Copier après la connexion
Copier après la connexion

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

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

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

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

public function hasPermission($permission)
{
    return $this->role->permissions()->where('name', $permission)->exists();
}
Copier après la connexion

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

public function role()
{
    return $this->belongsTo(Role::class);
}
Copier après la connexion
Copier après la connexion

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

四、定义角色和权限模型

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

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

php artisan make:model Permission
Copier après la connexion

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

public function roles()
{
    return $this->belongsToMany(Role::class);
}
Copier après la connexion

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

php artisan make:model Role
Copier après la connexion
Copier après la connexion

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

public function permissions()
{
    return $this->belongsToMany(Permission::class);
}
Copier après la connexion

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

composer dump-autoload
Copier après la connexion
Copier après la connexion

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

五、定义访问控制中间件

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

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

'permission' => AppHttpMiddlewarePermissionMiddleware::class,
Copier après la connexion

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

php artisan make:middleware PermissionMiddleware
Copier après la connexion

然后,我们需要在 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);
}
Copier après la connexion
Copier après la connexion

Après avoir exécuté la commande ci-dessus, Laravel générera un nouveau fichier de migration dans le dossier database/migrations. Ouvrez le fichier et mettez à jour la méthode up comme suit : 🎜rrreee🎜Après avoir enregistré et fermé le fichier, exécutez la commande suivante pour exécuter le fichier de migration : 🎜rrreee🎜Maintenant, nous avons terminé la fonction d'autorisation de Laravel configuré. 🎜🎜2. Définir les utilisateurs et les modèles de rôle🎜🎜Ensuite, nous devons définir les utilisateurs et les modèles de rôle et établir des relations entre eux. 🎜🎜Tout d'abord, nous devons créer un modèle de Rôle. Exécutez la commande suivante pour générer le fichier modèle : 🎜rrreee🎜 Ensuite, nous devons ajouter l'association avec l'utilisateur dans le modèle Role. Ouvrez le fichier app/Role.php et ajoutez le code suivant à la classe : 🎜rrreee🎜Ensuite, nous devons créer le modèle User. Exécutez la commande suivante pour générer le fichier modèle : 🎜rrreee🎜 Ensuite, nous devons ajouter l'association au rôle dans le modèle Utilisateur. Ouvrez le fichier app/User.php et ajoutez le code suivant à la classe : 🎜rrreee🎜Après avoir enregistré et fermé le fichier, exécutez la commande suivante dans le terminal pour vous assurer que le User< Le modèle /code> correspond à la table de données <code>utilisateurs à associer : 🎜rrreee🎜Nous avons réussi à définir l'utilisateur et les modèles de rôle et à établir la relation entre eux. 🎜🎜3. Définir les méthodes de contrôle d'accès des utilisateurs 🎜🎜Maintenant, nous devons définir certaines méthodes de contrôle d'accès des utilisateurs pour la vérification des autorisations dans l'application. 🎜🎜Tout d'abord, nous devons définir une méthode hasPermission pour vérifier si l'utilisateur dispose d'autorisations spécifiques. Ouvrez le fichier app/User.php et ajoutez la méthode suivante dans la classe User : 🎜rrreee🎜Ensuite, nous devons définir un rôle méthode pour vérifier le rôle de l’utilisateur. Ouvrez le fichier app/User.php et ajoutez la méthode suivante dans la classe User : 🎜rrreee🎜Après avoir enregistré et fermé le fichier, nous avons défini avec succès le contrôle d'accès des utilisateurs méthode. 🎜🎜4. Définir des modèles de rôles et d'autorisations🎜🎜Ensuite, nous devons définir des modèles de rôles et d'autorisations et établir des relations entre eux. 🎜🎜Tout d'abord, nous devons créer un modèle Permission. Exécutez la commande suivante pour générer le fichier modèle : 🎜rrreee🎜 Ensuite, nous devons ajouter l'association au rôle dans le modèle Permission. Ouvrez le fichier app/Permission.php et ajoutez le code suivant à la classe : 🎜rrreee🎜Ensuite, nous devons créer un modèle Role. Exécutez la commande suivante pour générer le fichier modèle : 🎜rrreee🎜 Ensuite, nous devons ajouter l'association avec les autorisations dans le modèle Role. Ouvrez le fichier app/Role.php et ajoutez le code suivant à la classe : 🎜rrreee🎜Après avoir enregistré et fermé le fichier, exécutez la commande suivante pour vous assurer que le modèle est associé à la table de données correspondante. : 🎜rrreee🎜us Les modèles de rôle et de permission ont été définis avec succès et les relations entre eux établies. 🎜🎜5. Définir un middleware de contrôle d'accès🎜🎜Enfin, nous devons définir un middleware de contrôle d'accès pour effectuer des vérifications d'autorisation lors de l'accès aux itinéraires restreints. 🎜🎜Tout d'abord, nous devons enregistrer le middleware dans le fichier app/Http/Kernel.php. Ouvrez le fichier et ajoutez le code suivant au tableau routeMiddleware : 🎜rrreee🎜Ensuite, nous devons créer une classe PermissionMiddleware. Exécutez la commande suivante pour générer le fichier de classe : 🎜rrreee🎜 Ensuite, nous devons implémenter la logique dans la classe middleware PermissionMiddleware pour la vérification des autorisations. Ouvrez le fichier app/Http/Middleware/PermissionMiddleware.php et ajoutez le code suivant à la classe : 🎜
public function handle($request, Closure $next, $permission)
{
    $user = Auth::user();

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

    return $next($request);
}
Copier après la connexion
Copier après la connexion

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

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

结束语:

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

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comparaison approfondie : meilleures pratiques entre les frameworks Java et d'autres frameworks de langage Comparaison approfondie : meilleures pratiques entre les frameworks Java et d'autres frameworks de langage Jun 04, 2024 pm 07:51 PM

Les frameworks Java conviennent aux projets où la multiplateforme, la stabilité et l'évolutivité sont cruciales. Pour les projets Java, Spring Framework est utilisé pour l'injection de dépendances et la programmation orientée aspect, et les meilleures pratiques incluent l'utilisation de SpringBean et SpringBeanFactory. Hibernate est utilisé pour le mappage objet-relationnel, et la meilleure pratique consiste à utiliser HQL pour les requêtes complexes. JakartaEE est utilisé pour le développement d'applications d'entreprise et la meilleure pratique consiste à utiliser EJB pour la logique métier distribuée.

Comparaison des dernières versions de Laravel et CodeIgniter Comparaison des dernières versions de Laravel et CodeIgniter Jun 05, 2024 pm 05:29 PM

Les dernières versions de Laravel 9 et CodeIgniter 4 fournissent des fonctionnalités et des améliorations mises à jour. Laravel9 adopte l'architecture MVC et fournit des fonctions telles que la migration de bases de données, l'authentification et le moteur de modèles. CodeIgniter4 utilise l'architecture HMVC pour fournir le routage, l'ORM et la mise en cache. En termes de performances, le modèle de conception basé sur le fournisseur de services de Laravel9 et le framework léger de CodeIgniter4 lui confèrent d'excellentes performances. Dans les applications pratiques, Laravel9 convient aux projets complexes qui nécessitent de la flexibilité et des fonctions puissantes, tandis que CodeIgniter4 convient au développement rapide et aux petites applications.

Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ? Comment les capacités de traitement des données de Laravel et de CodeIgniter se comparent-elles ? Jun 01, 2024 pm 01:34 PM

Comparez les capacités de traitement des données de Laravel et CodeIgniter : ORM : Laravel utilise EloquentORM, qui fournit un mappage relationnel classe-objet, tandis que CodeIgniter utilise ActiveRecord pour représenter le modèle de base de données en tant que sous-classe de classes PHP. Générateur de requêtes : Laravel dispose d'une API de requêtes chaînées flexible, tandis que le générateur de requêtes de CodeIgniter est plus simple et basé sur des tableaux. Validation des données : Laravel fournit une classe Validator qui prend en charge les règles de validation personnalisées, tandis que CodeIgniter a moins de fonctions de validation intégrées et nécessite un codage manuel des règles personnalisées. Cas pratique : l'exemple d'enregistrement d'utilisateur montre Lar

Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Jun 05, 2024 pm 07:50 PM

Pour les débutants, CodeIgniter a une courbe d'apprentissage plus douce et moins de fonctionnalités, mais couvre les besoins de base. Laravel offre un ensemble de fonctionnalités plus large mais a une courbe d'apprentissage légèrement plus raide. En termes de performances, Laravel et CodeIgniter fonctionnent bien. Laravel dispose d'une documentation plus complète et d'un support communautaire actif, tandis que CodeIgniter est plus simple, léger et possède de solides fonctionnalités de sécurité. Dans le cas pratique de la création d'une application de blog, EloquentORM de Laravel simplifie la manipulation des données, tandis que CodeIgniter nécessite une configuration plus manuelle.

Laravel - Commandes artisanales Laravel - Commandes artisanales Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Jun 04, 2024 am 09:09 AM

Lors du choix d'un framework pour de grands projets, Laravel et CodeIgniter ont chacun leurs propres avantages. Laravel est conçu pour les applications d'entreprise, offrant une conception modulaire, une injection de dépendances et un ensemble de fonctionnalités puissantes. CodeIgniter est un framework léger plus adapté aux projets de petite et moyenne taille, mettant l'accent sur la rapidité et la facilité d'utilisation. Pour les grands projets avec des exigences complexes et un grand nombre d'utilisateurs, la puissance et l'évolutivité de Laravel sont plus adaptées. Pour les projets simples ou les situations avec des ressources limitées, les capacités de développement légères et rapides de CodeIgniter sont plus idéales.

Laravel vs CodeIgniter : quel framework est le meilleur pour les petits projets ? Laravel vs CodeIgniter : quel framework est le meilleur pour les petits projets ? Jun 04, 2024 pm 05:29 PM

Pour les petits projets, Laravel convient aux projets plus importants qui nécessitent des fonctionnalités et une sécurité élevées. CodeIgniter convient aux très petits projets qui nécessitent légèreté et facilité d'utilisation.

Meilleures pratiques d'utilisation du C++ dans l'IoT et les systèmes embarqués Meilleures pratiques d'utilisation du C++ dans l'IoT et les systèmes embarqués Jun 02, 2024 am 09:39 AM

Introduction aux meilleures pratiques d'utilisation du C++ dans l'IoT et les systèmes embarqués C++ est un langage puissant largement utilisé dans l'IoT et les systèmes embarqués. Cependant, l’utilisation de C++ dans ces environnements restreints nécessite de suivre des bonnes pratiques spécifiques pour garantir performances et fiabilité. La gestion de la mémoire utilise des pointeurs intelligents : les pointeurs intelligents gèrent automatiquement la mémoire pour éviter les fuites de mémoire et les pointeurs suspendus. Pensez à utiliser des pools de mémoire : les pools de mémoire offrent un moyen plus efficace d'allouer et de libérer de la mémoire que le malloc()/free() standard. Minimiser l'allocation de mémoire : dans les systèmes embarqués, les ressources mémoire sont limitées. La réduction de l'allocation de mémoire peut améliorer les performances. Les threads et le multitâche utilisent le principe RAII : RAII (l'acquisition des ressources est l'initialisation) garantit que l'objet est libéré à la fin de son cycle de vie.

See all articles