Table des matières
Pensées originales de Bouncer
Cependant, il manque une chose au système d'autorisation intégré : des autorisations dynamiques, stockées dans une base de données
技术基础
文档
准备发布
Profitez-en !
Maison cadre php Laravel Recommandation d'extension Laravel : outil de gestion des rôles et des autorisations 'Bouncer'

Recommandation d'extension Laravel : outil de gestion des rôles et des autorisations 'Bouncer'

Oct 31, 2022 pm 08:25 PM
php laravel

Recommandation d'extension Laravel : outil de gestion des rôles et des autorisations 'Bouncer'

Après des années de développement, 56 versions, 1,3 million de téléchargements et plus de 2800 abonnés actifs Bouncer est enfin arrivé à la version 1.0. Il est extrêmement fiable et stable depuis un certain temps et est utilisé en production par d’innombrables applications à travers le monde.

Il s'agit d'une mise à jour personnelle contenant certaines de mes réflexions au fil des ans - de la création à la version finale. Pour des informations techniques sur la façon d'utiliser Bouncer au quotidien, consultez la documentation complète ou écoutez ma discussion avec Matt Stover sur The Laravel Podcast.


Qu'est-ce que Bouncer ?

Avant de commencer mon parcours personnel, voici une brève introduction à ce qu'est Bouncer et comment il s'intègre dans l'écosystème Laravel plus large.

Bouncer est un package open source permettant de gérer dynamiquement les rôles et les autorisations dans une base de données, entièrement intégré à Laravel's Gate.

Sans entrer dans les détails, voici une courte liste de certaines de ses principales caractéristiques :

  • Capacités simples:

    Bouncer::allow($user)->to('access-dashboard');
    Copier après la connexion
  • Capacités de modèle:

    Bouncer::allow($user)->to('view', Invoice::class);
    Bouncer::allow($user)->to('delete', $invoice);
    Copier après la connexion
  • Flexible rôles:

    Bouncer::allow('admin')->everything();
    Bouncer::assign('admin')->to($user);
    Copier après la connexion
  • Capacités interdites:

    Bouncer::allow($user)->to('view', Invoice::class);
    Bouncer::forbid($user)->to('view', $confidentialInvoice);
    Copier après la connexion
  • Propriété puissante:

    Bouncer::allow($user)->toOwn(Post::class);
    Copier après la connexion
  • Avant droit multi-location:

    Bouncer::scope()->to($tenantId);
    Copier après la connexion
  • Mise en cache intégrée

    Bouncer::cache();
    Copier après la connexion

...et plus encore. Pour plus de détails, consultez la documentation complète, ou parcourez simplement la aide-mémoire.

Pensées originales de Bouncer

En août 2015, Taylor en a ajouté un dans Laravel 5.2 Nouveau système d'autorisation, appelé < code>Porte. Cela fournit une API intéressante pour définir des contrôles d'autorisation pour diverses opérations dans votre application, Simple define< /code> rappels<code>Gate。这提供了一个很好用的 API,用于应用程序中定义各种操作的权限检查,简单 定义 回调 和完整的 policies,以及根据您定义的内容在 整个系统中挂接检查权限

当我开始使用它时,我就知道这将是所有 Laravel 应用程序的 ACL 的未来。 真是太好了,Taylor 对清晰和直观的 API 有这种惊人的感觉,而「Gate」抽象真正地揭示了这一点。

然而,内置授权系统缺少一件事:动态权限,存储在数据库中。 构建 Gate 的方式,所有检查都由应用程序中定义的硬编码函数执行,因此无法让您的管理员在运行时通过某些仪表板 UI 控制其中任何一个。 正如泰勒的 原始提交 明确指出:

[内置 Gate] 为组织逻辑提供了一种结构,该逻辑授权对实体进行操作。 它没有对「用户角色」的定义做出任何决定。

当时,还有许多其他流行的 ACL 操作系统支持在运行时调整权限,但它们有一个主要缺点:它们都是在 Laravel 的 Gate et politiques

complètes, ainsi que définies par vous Le contenu est lié à la vérification autorisations

dans tout le système. Quand j'ai commencé à l'utiliser, je savais que ce serait l'ACL pour toutes les applications Laravel

avenir. C'est génial que Taylor ait cette sensation incroyable pour les API claires et intuitives, et l'abstraction "Gate" le révèle vraiment.

Cependant, il manque une chose au système d'autorisation intégré : des autorisations dynamiques, stockées dans une base de données

. De la façon dont Gate est construit, toutes les vérifications sont effectuées par des fonctions codées en dur définies dans l'application, il n'y a donc aucun moyen pour votre administrateur de contrôler l'une d'entre elles au moment de l'exécution via une interface utilisateur de tableau de bord. Comme le dit clairement le

engagement original de Taylor :

[Built-in Gate] fournit une structure pour organiser la logique qui autorise les opérations sur les entités. Il ne prend aucune décision sur la définition des « rôles d'utilisateur ».

À l'époque, de nombreux autres ACL systèmes d'exploitation populaires étaient pris en charge. Ils ont un inconvénient majeur : ils ont été construits avant le Gate de Laravel. Ce sont des systèmes complètement séparés ; si vous décidez de les utiliser, vous abandonnez tous les détails et la belle intégration fournie par la porte de Laravel.

J'ai donc décidé de créer un package open source qui vous offre le meilleur des deux mondes : des autorisations dynamiques basées sur une base de données, entièrement intégrées à la porte de Laravel. Recommandation dextension Laravel : outil de gestion des rôles et des autorisations BouncerNous avons apporté quelques améliorations à la vérification des portes dans Laravel 5.3

pour la rendre plus simple et prévisible, facilitant ainsi le stockage de ces fonctions dans la base de données.

Nom et logo du Bouncer

Recommandation dextension Laravel : outil de gestion des rôles et des autorisations BouncerJ’ai pensé très tôt au nom « Bouncer ». Le travail du

Bouncer

consiste à assurer la sécurité à la porte et à vérifier les autorisations des personnes. C'est donc une association très naturelle avec "Gate" dans Laravel.

Ce qui est drôle, c'est que le créateur de logo avec lequel je travaillais à l'époque (qui n'était pas anglophone) n'a pas obtenu la référence. Voici quelques Recommandation dextension Laravel : outil de gestion des rôles et des autorisations Bouncerlogos originaux

qu'il a conçus :

🎜🎜🎜Les deux à droite sont évidemment inspirés par l'action rebondissante. 🎜🎜Après avoir rapidement clarifié la signification du mot garde du corps, nous avons commencé à itérer sur le véritable logo du garde du corps. Nous avons essayé des videurs amicaux, des videurs menaçants, des videurs barbus, des videurs à mâchoire carrée et des tonnes de variantes différentes. En voici quelques-uns : 🎜🎜🎜🎜🎜 J'adore ce avec quoi nous avons fini : 🎜🎜🎜🎜🎜 Il dégage un fort sentiment de sécurité, mais sa rondeur le rend plus convivial et moins menaçant 🎜

技术基础

Bouncer's 的存在理由是与 Laravel 的 gate 无缝集成的。为了实现这一点,我心中的只有一个目标:在为用户分配角色和能力时,您只需和 Bouncer 进行交互。对于实际的授权检查,整个系统中 Laravel 的钩子应该自动工作,而不需任何特殊的 Bouncer 语法。ically, without any special Bouncer syntax.

将 Bouncer 挂钩到 Laravel 的 gate 检查方式是相当简单的。Gate 让你定义 一个全局的 before 回调,它将会在任何您定义的检查之前被调用:如果您的 before 回调允许或不许与某个操作,则不会运行进一步检查。

虽然 before 回调最初是为 「允许管理员执行所有操作」之类的东西而设计的,但我立即意识到这将是连接动态检查的理想场所,允许我查询数据库以获得任何权限。这就是它最初的工作方式(我们后来将其切换为使用 after 回调 - 你可以阅读更多关于 在此线程

文档

从一开始,文档对我来说就非常重要。 开源项目的生死取决于他们的文档,所以我希望 Bouncer 的文档尽可能做到最好。尤其是在 Laravel 生态系统中,Taylor 为细致的文档设定了极高的标准。

在某种程度上,清晰的文档有时甚至比代码本身更重要。如果不告诉你的用户如何使用你的工具,他们中很少有人会使用源代码来解决这个问题。他们只会继续做下一件事。

我将 Bouncer 的成功很大程度上归功于清晰的文档,但在这方面还有很多工作要做。作为创建者,对整个谜题有一个清晰的了解,很容易忘记刚接触该工具的人会遇到什么困难。

例如:如前所述,Bouncer 仅用于为用户分配角色和权限。实际的授权检查将像在任何标准 Laravel 应用程序中一样处理。所以我想我不必重复所有这些,因为 Laravel 文档中清楚地概述了它。尽管如此,我仍然看到人们为此苦苦挣扎。他们设置了自己的角色和权限,然后不知道从哪里开始。这是我仍然想在文档中充实的一个领域。

准备发布

将 1.0 版本推迟到现在对我的用户造成了伤害。 Bouncer 多年来一直很稳定,并在世界各地的生产中积极使用。 然而,我总是犹豫要不要发布它,因为我知道我想添加的东西太多了。 我在 播客 上与 Matt 详细讨论了这个问题:我掉进了想要在发布之前让它变得完美的陷阱,这显然是 不可能的。 正如伏尔泰 已警告:「完美是良好的敌人」。

因此,当我发布 Bouncer 1.0 版时,我仍然希望在初始版本中包含 2 个出色的功能,但没有成功:

  • 每个模型的角色。 很长一段时间以来,人们一直在吵着要一种方法,只为给定的模型(或模型类)分配角色给用户。 这是该代码的样子:

    // 注意:这还没有实现
    Bouncer::allow(&#39;editor&#39;)->to([&#39;view&#39;, &#39;edit&#39;])->everything();
    Bouncer::assign(&#39;editor&#39;)->to($user)->for(Invoice:class);
    Copier après la connexion

    这样,用户就可以查看和编辑所有发票,但不能做其他任何事情。 当然,这现在可以在没有角色的情况下直接完成,但通过角色来完成会提供另一层灵活性。

    我已经尝试过多次解决这个问题,但结果非常棘手,因为缓存变成了一场真正的噩梦。 我仍然希望有一天能解决它。 走着瞧。

  • 能力限制。 允许对给定能力进行任意限制将增加更精细的控制:

    // 注意:这还没有实现
    Bouncer::allow($user)
    ->to(&#39;view&#39;, Post::class)
    ->where(&#39;is_confidential&#39;, false);
    Copier après la connexion

    Si vous explorez le code source de Bouncer, vous trouverez des code et des tests où j'ai commencé à l'implémenter. C'est loin d'être terminé, mais restez à l'écoute.

Dans l’ensemble, Bouncer est dans une très bonne position. Tout bon produit a une longue feuille de route, et il est insensé et irréaliste de penser que je peux arriver au bout de cette route avant de sortir la version 1.0.

Profitez-en !

D'accord, c'est tout. J'espère que vous essayerez d'utiliser Bouncer dans vos applications et que vous apprécierez son utilisation. L'API de Bouncer est conçue pour ressembler à de la prose, et chaque appel de méthode se lit comme une phrase anglaise appropriée. Essayez-le et faites-moi savoir si vous ressentez cela !

【Recommandation associée : tutoriel vidéo 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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

PHP et Python: comparaison de deux langages de programmation populaires PHP et Python: comparaison de deux langages de programmation populaires Apr 14, 2025 am 12:13 AM

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

Statut actuel de PHP: un regard sur les tendances de développement Web Statut actuel de PHP: un regard sur les tendances de développement Web Apr 13, 2025 am 12:20 AM

Le PHP reste important dans le développement Web moderne, en particulier dans la gestion de contenu et les plateformes de commerce électronique. 1) PHP a un écosystème riche et un fort soutien-cadre, tels que Laravel et Symfony. 2) L'optimisation des performances peut être obtenue via Opcache et Nginx. 3) PHP8.0 introduit le compilateur JIT pour améliorer les performances. 4) Les applications natives dans le cloud sont déployées via Docker et Kubernetes pour améliorer la flexibilité et l'évolutivité.

PHP: un langage clé pour le développement Web PHP: un langage clé pour le développement Web Apr 13, 2025 am 12:08 AM

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

PHP vs autres langues: une comparaison PHP vs autres langues: une comparaison Apr 13, 2025 am 12:19 AM

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.

La pertinence durable de PHP: est-elle toujours vivante? La pertinence durable de PHP: est-elle toujours vivante? Apr 14, 2025 am 12:12 AM

PHP est toujours dynamique et occupe toujours une position importante dans le domaine de la programmation moderne. 1) La simplicité de PHP et le soutien communautaire puissant le rendent largement utilisé dans le développement Web; 2) sa flexibilité et sa stabilité le rendent exceptionnelle dans la gestion des formulaires Web, des opérations de base de données et du traitement de fichiers; 3) PHP évolue et optimise constamment, adapté aux débutants et aux développeurs expérimentés.

PHP: la fondation de nombreux sites Web PHP: la fondation de nombreux sites Web Apr 13, 2025 am 12:07 AM

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.

Objectif de PHP: Construire des sites Web dynamiques Objectif de PHP: Construire des sites Web dynamiques Apr 15, 2025 am 12:18 AM

PHP est utilisé pour créer des sites Web dynamiques, et ses fonctions principales incluent: 1. Générer du contenu dynamique et générer des pages Web en temps réel en se connectant à la base de données; 2. Traiter l'interaction utilisateur et les soumissions de formulaires, vérifier les entrées et répondre aux opérations; 3. Gérer les sessions et l'authentification des utilisateurs pour offrir une expérience personnalisée; 4. Optimiser les performances et suivre les meilleures pratiques pour améliorer l'efficacité et la sécurité du site Web.

PHP vs Python: fonctionnalités et fonctionnalités de base PHP vs Python: fonctionnalités et fonctionnalités de base Apr 13, 2025 am 12:16 AM

PHP et Python ont chacun leurs propres avantages et conviennent à différents scénarios. 1.PHP convient au développement Web et fournit des serveurs Web intégrés et des bibliothèques de fonctions riches. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et une bibliothèque standard puissante. Lors du choix, il doit être décidé en fonction des exigences du projet.

See all articles