Maison cadre php Laravel Conseils sur la fonction d'autorisation de Laravel : Comment implémenter l'héritage des autorisations et la gestion des relations d'héritage

Conseils sur la fonction d'autorisation de Laravel : Comment implémenter l'héritage des autorisations et la gestion des relations d'héritage

Nov 04, 2023 am 09:28 AM
autorisations laravel Héritage des autorisations Gestion des relations successorales

Conseils sur la fonction dautorisation de Laravel : Comment implémenter lhéritage des autorisations et la gestion des relations dhéritage

Laravel est un framework doté de fonctionnalités riches pour développer rapidement des applications Web. Sa fonctionnalité d’autorisations en fait partie. Dans cet article, nous commencerons à apprendre deux problèmes clés du système d'autorisations de Laravel : l'héritage des autorisations et la gestion des relations d'héritage, et nous mettrons en œuvre une démonstration de code fonctionnel.

Héritage des autorisations

L'héritage des autorisations fait référence au passage des autorisations d'un rôle à un autre. Dans certains cas, il est nécessaire d'attribuer des autorisations à un rôle, puis de transmettre ces autorisations à un rôle plus spécifique. Par exemple, si nous souhaitons gérer les autorisations d'une organisation, nous pouvons accorder à l'administrateur de l'unité toutes les autorisations de l'organisation. Plutôt que d'avoir à attribuer des autorisations à chaque employé.

Laravel fournit la fonction "Permission Inheritance", que nous pouvons utiliser pour transmettre les autorisations d'un rôle à un autre. Commençons par apprendre à implémenter cette fonctionnalité.

Avant de commencer, nous devons créer une base de données. Nous allons créer deux tables : rôles et autorisations.

CREATE TABLE `roles` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `parent_id` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `permissions` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Copier après la connexion

Nous allons créer une table de rôles pour stocker les rôles, y compris les champs id, name et parent_id. Le champ id est une clé primaire et doit être unique. Le champ Nom stockera le nom du rôle. Le champ parent_id est facultatif et représente le rôle parent de ce rôle. Nous allons également créer le tableau des autorisations, qui comprend les champs d'identifiant et de nom. Le champ id est une clé primaire et doit être unique. Le champ de nom stockera le nom de l'autorisation.

Voici des exemples de données de la table des rôles :

INSERT INTO `roles` (`id`, `name`, `parent_id`) VALUES
(1, 'Admin', NULL),
(2, 'Manager', 1),
(3, 'User', 2);
Copier après la connexion

Dans les exemples de données ci-dessus, nous avons créé trois rôles. Le premier rôle est appelé "Administrateur", qui n'a pas de rôle parent ; le deuxième rôle est appelé "Manager". son rôle parent est « Administrateur » ; le troisième rôle est appelé « Utilisateur » et son rôle parent est « Gestionnaire ».

Maintenant, nous devons implémenter la fonction d'héritage des autorisations. Pour ce faire, nous devons créer une fonction qui recevra un ID de rôle, trouvera tous les rôles parents de ce rôle et renverra les autorisations pour ces rôles. Nous allons également implémenter une autre fonction qui recevra un ID de rôle et un nom d'autorisation et vérifiera si le rôle dispose de cette autorisation, soit en l'accordant directement, soit en en héritant.

Voici la fonction pour obtenir tous les rôles parents d'un rôle :

public function getPermissionsByRoleId($roleId) {
    $permissions = [];
    $role = Role::find($roleId);
    while($role) {
        $parent = Role::find($role->parent_id);
        if($parent) {
            $permissions = array_merge($permissions, $parent->permissions);
        }
        $role = $parent;
    }
    return $permissions;
}
Copier après la connexion

Le code ci-dessus crée un tableau $permissions et parcourt les rôles parents du rôle en commençant par le rôle spécifié. Lorsque le rôle parent est trouvé, ajoutez toutes ses autorisations au tableau $permissions. Si le rôle parent n'est pas trouvé, la boucle while se termine et le tableau $permissions est renvoyé.

Nous allons maintenant implémenter une autre fonction qui recevra l'ID du rôle et le nom de l'autorisation et vérifiera si le rôle dispose de cette autorisation. Voici le code de la fonction :

public function hasRolePermission($roleId, $permissionName) {
    $permissions = $this->getPermissionsByRoleId($roleId);
    foreach($permissions as $permission) {
        if($permission->name == $permissionName) {
            return true;
        }
    }
    return false;
}
Copier après la connexion

Le code ci-dessus appelle la fonction getPermissionsByRoleId pour obtenir toutes les autorisations pour le rôle et l'itère pour trouver l'autorisation spécifiée. Si l'autorisation est trouvée, la fonction renvoie vrai. Sinon, il renvoie faux.

Maintenant que nous avons appris comment implémenter l'héritage des autorisations, concentrons-nous sur l'apprentissage de la façon dont Laravel implémente la gestion des relations d'héritage.

Gestion des relations successorales

Dans certains cas, il est nécessaire de créer des relations successorales et de les utiliser dans l'application. Par exemple, si nous avons une application de gestion de département, chaque département peut avoir un responsable. La relation entre le manager et le service peut s'établir par voie d'héritage.

Dans Laravel, nous pouvons utiliser la fonction « association polymorphe » pour établir des relations d'héritage. Commençons par apprendre à le mettre en œuvre.

Nous allons créer un tableau de données des départements. La table des départements représentera les départements de l'application et comprend les champs id, name et parent_id. Le champ id est une clé primaire et doit être unique. Le nom du champ Nom stockera le nom du département. Le champ parent_id est facultatif et représente le service parent de ce service. De plus, nous allons créer une table d'utilisateurs. Ce tableau contient des informations de base sur un utilisateur, y compris les champs ID et Nom. Nous devons également créer une table des utilisateurs. La table contiendra les champs user_id, userable_id et userable_type. Parmi eux, le champ user_id est une clé étrangère pointant vers le champ id dans la table users. Les champs userable_id et userable_type sont des champs polymorphes qui représentent le modèle auquel l'utilisateur est associé.

Voici la structure de la table de données requise et les exemples de données :

CREATE TABLE `departments` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `parent_id` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `users` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `userables` (
  `id` int(10) UNSIGNED NOT NULL,
  `user_id` int(10) UNSIGNED NOT NULL,
  `userable_id` int(10) UNSIGNED NOT NULL,
  `userable_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `departments` (`id`, `name`, `parent_id`) VALUES
(1, 'Administration', NULL),
(2, 'Finance', 1),
(3, 'Sales', 1),
(4, 'IT', 1),
(5, 'Accounts Payable', 2),
(6, 'Accounts Receivable', 2),
(7, 'Engineering', 4),
(8, 'Development', 7),
(9, 'Testing', 7);

INSERT INTO `users` (`id`, `name`) VALUES
(1, 'User One'),
(2, 'User Two'),
(3, 'User Three');

INSERT INTO `userables` (`id`, `user_id`, `userable_id`, `userable_type`) VALUES
(1, 1, 1, 'Department'),
(2, 1, 2, 'Department'),
(3, 2, 3, 'Department'),
(4, 3, 9, 'Department');
Copier après la connexion

Dans les exemples de données ci-dessus, nous avons créé un département nommé « Administration », qui n'a pas de département parent nommé « Finance », « Ventes », « Informatique » ; Les départements « Administration » ont pour département parent le département « Administration ». De plus, les départements nommés « Comptes fournisseurs » et « Comptes clients » ont le département « Finances » comme service parent. Un département nommé « Ingénierie » a le département « Informatique » comme département parent. Les départements « Développement » et « Tests » ont pour département parent le département « Ingénierie ».

Nous utiliserons ces données de département et d'utilisateur pour établir des relations d'héritage.

Voici l'association polymorphe entre la table des utilisateurs et les départements :

class Userable extends Model {
    public function userable() {
        return $this->morphTo();
    }

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

以上代码定义了 userable 函数。该函数返回与 userable 模型相关联的模型。在我们的情况下,userable 将返回 Department 模型或任何其他相关模型。

接下来,我们定义 Department 模型:

class Department extends Model {
    public function users() {
        return $this->morphMany(Userable::class, 'userable');
    }

    public function parent() {
        return $this->belongsTo(Department::class, 'parent_id');
    }

    public function children() {
        return $this->hasMany(Department::class, 'parent_id');
    }
}
Copier après la connexion

以上代码定义了三个函数。users 函数返回将 Userable id 与当前模型实例相关联的所有 User 实例。parent 函数返回这个部门的一个父级部门。children 函数返回所有直接关联的部门。

现在,我们可以使用这些函数来获取一个部门的所有直接用户。以下是 getAllUsers 函数。

public function getAllUsers() {
    $users = [];
    foreach($this->users as $user) {
        $users[] = $user->user;
    }
    return $users;
}
Copier après la connexion

此函数将从当前部门中检索所有用户,并返回一个数组,其中包含这些用户。

最后,我们将定义 User 模型:

class User extends Model {
    public function userables() {
        return $this->hasMany(Userable::class);
    }

    public function departments() {
        return $this->morphToMany(Department::class, 'userable');
    }

    public function getDepartmentAttribute() {
        $department = null;
        foreach($this->userables as $userable) {
            if($userable->userable_type == 'Department') {
                $department = $userable->userable;
                break;
            }
        }
        return $department;
    }
}
Copier après la connexion

以上代码定义了三个函数。userables 函数返回该用户的所有可关联实例。departments 函数返回与此用户相关联的所有部门。getDepartmentAttribute 函数将从 userables 中找到所有 Department 实例,并返回它们中的第一个。

以上所有代码示例可以一起使用,以计划实现 Laravel 权限系统的两个主要问题:权限继承和继承关系管理。

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines 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)

Comment implémenter la prise en charge multilingue basée sur les autorisations dans Laravel Comment implémenter la prise en charge multilingue basée sur les autorisations dans Laravel Nov 02, 2023 am 08:22 AM

Comment implémenter la prise en charge multilingue basée sur les autorisations dans Laravel Introduction : Dans les sites Web et les applications modernes, la prise en charge multilingue est une exigence très courante. Pour certains systèmes complexes, nous pouvons également avoir besoin d'afficher dynamiquement différentes traductions linguistiques en fonction des autorisations de l'utilisateur. Laravel est un framework PHP très populaire qui fournit de nombreuses fonctionnalités puissantes pour simplifier le processus de développement. Cet article présentera comment implémenter la prise en charge multilingue basée sur les autorisations dans Laravel et fournira des exemples de code spécifiques. Étape 1 : Configurez d'abord la prise en charge multilingue

Application pratique de la fonction d'autorisation de Laravel : comment implémenter le contrôle des autorisations de la structure organisationnelle des utilisateurs Application pratique de la fonction d'autorisation de Laravel : comment implémenter le contrôle des autorisations de la structure organisationnelle des utilisateurs Nov 02, 2023 am 08:17 AM

Application pratique de la fonction d'autorisation de Laravel : Comment implémenter le contrôle des autorisations de la structure organisationnelle des utilisateurs nécessite des exemples de code spécifiques Introduction : Avec le développement rapide des applications Web, le contrôle des autorisations des utilisateurs est devenu une exigence fonctionnelle importante. Laravel, en tant que framework PHP populaire, fournit des fonctions de gestion des autorisations flexibles et puissantes. Cet article explique comment utiliser Laravel pour implémenter le contrôle des autorisations de la structure organisationnelle des utilisateurs et donne des exemples de code spécifiques. 1. La nécessité d'un contrôle des autorisations de la structure organisationnelle des utilisateurs Dans de nombreuses applications, les autorisations des utilisateurs sont généralement basées sur.

Conseils sur la fonction d'autorisation de Laravel : Comment implémenter l'héritage des autorisations et la gestion des relations d'héritage Conseils sur la fonction d'autorisation de Laravel : Comment implémenter l'héritage des autorisations et la gestion des relations d'héritage Nov 04, 2023 am 09:28 AM

Laravel est un framework doté de riches fonctionnalités permettant de développer rapidement des applications Web. Sa fonctionnalité d’autorisations en fait partie. Dans cet article, nous commencerons à apprendre deux problèmes clés du système d'autorisations de Laravel : l'héritage des autorisations et la gestion des relations d'héritage, et nous mettrons en œuvre une démonstration de code fonctionnel. Héritage des autorisations L'héritage des autorisations fait référence au transfert d'autorisations d'un rôle à un autre. Dans certains cas, il est nécessaire d'attribuer des autorisations à un rôle, puis de transmettre ces autorisations à des rôles plus spécifiques. Par exemple, si nous voulons gérer un

Conseils pratiques pour les autorisations Laravel : Comment réaliser une synchronisation et une mise à jour automatiques des autorisations Conseils pratiques pour les autorisations Laravel : Comment réaliser une synchronisation et une mise à jour automatiques des autorisations Nov 02, 2023 pm 07:02 PM

Conseils pratiques pour la fonction d'autorisation de Laravel : Comment réaliser une synchronisation et une mise à jour automatiques des autorisations Introduction : Laravel est un framework de développement PHP populaire qui fournit de puissantes fonctions de gestion des autorisations qui peuvent être utilisées pour gérer les autorisations d'accès des utilisateurs dans le système. Dans les systèmes plus grands, la gestion des autorisations peut être très complexe, donc comment synchroniser et mettre à jour automatiquement les autorisations est une technique utile. Cet article explique comment utiliser la fonction de gestion des autorisations de Laravel pour réaliser une synchronisation et une mise à jour automatiques des autorisations. 1. Le droit d'utiliser Laravel

Garantie de fiabilité de la fonction d'autorisations de Laravel : comment implémenter une sauvegarde redondante et une récupération des autorisations Garantie de fiabilité de la fonction d'autorisations de Laravel : comment implémenter une sauvegarde redondante et une récupération des autorisations Nov 02, 2023 am 08:44 AM

Garantie de fiabilité de la fonction d'autorisation de Laravel : Comment mettre en œuvre une sauvegarde et une récupération redondantes des autorisations nécessite des exemples de code spécifiques Introduction : Avec le développement rapide des applications Web, la gestion des autorisations dans le système est devenue de plus en plus importante. Laravel, en tant que framework PHP populaire, fournit des fonctions pratiques de gestion des autorisations. Cependant, la perte ou la modification accidentelle des données d'autorisation peut entraîner un fonctionnement anormal du système, voire une fuite de données. Par conséquent, la mise en œuvre d’une sauvegarde redondante et de la récupération des autorisations est un élément important pour garantir la fiabilité du système. Cet article expliquera comment utiliser Larave

Expérience pratique avec les fonctions d'autorisation de Laravel : comment gérer les conflits et les chevauchements d'autorisations Expérience pratique avec les fonctions d'autorisation de Laravel : comment gérer les conflits et les chevauchements d'autorisations Nov 03, 2023 am 08:39 AM

Expérience pratique avec la fonction d'autorisations de Laravel : Comment gérer les conflits et les chevauchements d'autorisations Introduction : La gestion des autorisations est une tâche très importante lors du développement d'applications Web. Le framework Laravel fournit de nombreux outils et fonctions pratiques pour gérer le contrôle des autorisations. Cependant, dans le processus de développement actuel, nous rencontrons parfois des conflits d'autorisations et des problèmes de chevauchement, ce qui nous oblige à les gérer avec soin pour garantir l'exactitude et la cohérence des autorisations. Cet article partagera une expérience pratique et expliquera comment utiliser Laravel pour résoudre ces problèmes. En même temps, je

Fonctionnalités avancées de la fonction d'autorisation de Laravel : comment implémenter un contrôle d'autorisation multidimensionnel Fonctionnalités avancées de la fonction d'autorisation de Laravel : comment implémenter un contrôle d'autorisation multidimensionnel Nov 03, 2023 pm 03:32 PM

Fonctionnalités avancées de la fonction d'autorisation de Laravel : Comment implémenter le contrôle d'autorisation multidimensionnel nécessite des exemples de code spécifiques Introduction : À mesure que la complexité de l'entreprise augmente, le contrôle d'autorisation joue un rôle essentiel dans les applications Web. Laravel, en tant que framework PHP populaire, nous offre des fonctions d'autorisation puissantes et flexibles. En plus de la gestion de base des rôles et des autorisations, Laravel prend également en charge le contrôle des autorisations multidimensionnel, qui permet un contrôle précis des autorisations basé sur les utilisateurs, les rôles, les ressources et les opérations. Cet article explique comment utiliser

Exemples pratiques de fonctions d'autorisation Laravel : Comment gérer la mise à niveau et la migration des autorisations Exemples pratiques de fonctions d'autorisation Laravel : Comment gérer la mise à niveau et la migration des autorisations Nov 03, 2023 am 11:48 AM

Exemples pratiques de la fonction d'autorisation de Laravel : Comment gérer les mises à niveau et les migrations d'autorisations, des exemples de code spécifiques sont nécessaires. À mesure que le projet continue de se développer et que l'entreprise se développe, la gestion des autorisations est devenue un problème clé. Dans le framework Laravel, la fonction d'autorisation Laravel nous fournit un outil de gestion des autorisations très pratique et puissant. Cependant, dans le cas de mises à niveau et de migrations fréquentes des autorisations dans le projet, nous avons besoin d'un ensemble fiable de stratégies pour garantir la sécurité et la stabilité du système. Cet article utilisera des exemples de code spécifiques pour expliquer comment gérer l’élévation de privilèges.

See all articles