Laravel拡張機能のおすすめ:ロール・権限管理ツール「Bouncer」
数年にわたる開発、56 回のリリース、130 万ダウンロード、2,800 人を超えるアクティブなフォロワーを経て、Bouncer がついにバージョン 1.0 に到達しました。かなり長い間、非常に信頼性が高く安定しており、世界中の無数のアプリによって運用環境で使用されています。
これは、開始から最終リリースまで、長年にわたる私の考えの一部を含む個人的なアップデートです。 Bouncer を毎日使用する方法に関する技術情報については、広範なドキュメントを確認するか、The Laravel Podcast での Matt Stover とのディスカッションを聞いてください。
バウンサーとは何ですか?
#個人的な旅を始める前に、バウンサーとは何か、またその仕組みについて簡単に説明します。より大きなLaravelエコシステムに適合します。
Bouncer は、データベース内のロールと権限を動的に管理するためのオープンソース パッケージであり、Laravel の Gate と完全に統合されています。
あまり詳細には触れずに、主な機能のいくつかの短いリストを以下に示します。
-
Bouncer::allow($user)->to('access-dashboard');
ログイン後にコピー Bouncer::allow($user)->to('view', Invoice::class); Bouncer::allow($user)->to('delete', $invoice);
ログイン後にコピー柔軟役割 :
#Bouncer::allow('admin')->everything(); Bouncer::assign('admin')->to($user);
ログイン後にコピー- #禁断の能力 強力な所有権
- : 単純なマルチテナンシー
- : 組み込みキャッシュ
...他にもあります。詳細については、完全なドキュメントを確認するか、チートシートを参照してください。
Bouncer Initial Thoughts
2015 年 8 月に戻りますが、Taylor は、Gate と呼ばれる 新しい認証システム
を Laravel 5.2 に追加しました。これは、アプリケーション内のさまざまな操作の権限チェック、単純な 定義
コールバック および完全な ポリシー 、およびフック チェック権限 を定義するための優れた API を提供します。 定義した内容に基づくシステム。
これを使い始めたとき、これがすべての Laravel アプリケーションにおける ACL の将来になるだろうと確信しました。 Taylor が明確で直感的な API に対してこの素晴らしい感覚を持っていることは素晴らしいことですが、「Gate」の抽象化はそれを本当に明らかにしています。
ただし、組み込みの承認システムには、データベースに保存される動的権限というものが欠けています。 Gate の構築方法では、すべてのチェックはアプリケーションに定義されたハードコーディングされた関数によって実行されるため、管理者が実行時にダッシュボード UI を介してそれらの関数を制御する方法はありません。 Taylor の original commit で明確に述べられているように、
[組み込みゲート] は、エンティティに対する操作を許可するロジックを組織化するための構造を提供します。 「ユーザーの役割」の定義については何も決定しません。
当時、実行時のアクセス許可の調整をサポートする人気の ACL オペレーティング システムは他にもたくさんありましたが、それらには 1 つの大きな欠点がありました。それは、それらはすべて Laravel の Gate に含まれていたということです。
以前に構築されました。これらは完全に別個のシステムであるため、これらを使用することに決めた場合、Laravel のゲートが提供するすべての詳細と美しい統合を放棄することになります。
そこで私は、Laravel のゲートと完全に統合された動的なデータベース主導のアクセス許可という、両方の長所を提供するオープンソース パッケージを構築することにしました。 Laravel 5.3 では、ゲートチェックをより合理化して予測可能にし、これらの関数をデータベースに保存しやすくするためにいくつかの改善を行いました。
バウンサーの名前とロゴ
「バウンサー」という名前は、かなり早い段階から考えていました。 ボディーガードの仕事は、玄関で警備を行い、人々の許可をチェックすることです。したがって、これは Laravel の「Gate」と非常に自然な組み合わせです。
興味深いことに、当時私が一緒に仕事をしていたロゴ デザイナー (英語を母国語としない人) は参考にしませんでした。彼がデザインしたオリジナルのロゴの一部を以下に示します。
右側の 2 つは、明らかに跳ねるアクションからインスピレーションを得たものです。
ボディーガードという言葉の意味をすぐに明確にした後、実際のボディーガードのロゴについて繰り返し検討を開始しました。私たちは、友好的な用心棒、脅迫的な用心棒、ひげを生やした用心棒、四角い顎の用心棒など、さまざまなバリエーションを試してみました。ここではほんの一部を紹介します:
私たちが最終的に完成したものが本当に気に入っています:
強いセンスがにじみ出ています。安全感はありますが、丸みがあるため、より親しみやすく、脅威が少ないと感じられます。
技术基础
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('editor')->to(['view', 'edit'])->everything(); Bouncer::assign('editor')->to($user)->for(Invoice:class);
ログイン後にコピー这样,用户就可以查看和编辑所有发票,但不能做其他任何事情。 当然,这现在可以在没有角色的情况下直接完成,但通过角色来完成会提供另一层灵活性。
我已经尝试过多次解决这个问题,但结果非常棘手,因为缓存变成了一场真正的噩梦。 我仍然希望有一天能解决它。 走着瞧。
能力限制。 允许对给定能力进行任意限制将增加更精细的控制:
// 注意:这还没有实现 Bouncer::allow($user) ->to('view', Post::class) ->where('is_confidential', false);
ログイン後にコピーBouncer のソース コードを調べると、これを実装し始めた code と tests が見つかります。まだまだ完成には程遠いですが、楽しみにしていてください。
全体的に、『Bouncer』は非常に良い位置にあります。すべての優れた製品には長いロードマップがあり、1.0 をリリースする前にその道の終わりに到達できると考えるのは愚かで非現実的です。
ぜひ使ってみてください!
わかりました、以上です。あなたのアプリケーションで Bouncer を使用して楽しんでいただければ幸いです。 Bouncer の API は散文のように設計されており、各メソッド呼び出しは適切な英語の文章のように読み取れます。試してみて、あなたもそう感じたら教えてください!
[関連する推奨事項: laravel ビデオチュートリアル ]
以上がLaravel拡張機能のおすすめ:ロール・権限管理ツール「Bouncer」の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。
