經過多年開發,56 次發布,130 萬下載,並且超過 2800 的主動關注 Bouncer 終於來到了 1.0 版本。在相當長的一段時間裡,它一直非常可靠和穩定,並被世界各地無數的 app 用於生產。
這是我個人的更新,包含了我多年來的一些思考 —— 從最初到最終發行。關於如何每天使用 Bouncer 的技術信息,請查看 the extensive documentation 或在 The Laravel Podcast 聽我和馬特・斯托弗討論。
什麼是Bouncer?
##在開始我的個人旅程之前,這裡先簡單介紹Bouncer 是什麼,以及它如何融入更大的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::allow($user)->to('view', Invoice::class); Bouncer::forbid($user)->to('view', $confidentialInvoice);
-
Bouncer::allow($user)->toOwn(Post::class);
-
#
Bouncer::scope()->to($tenantId);
-
Bouncer::cache();
... 還有更多。有關詳細信息,請查看完整的文檔,或只需瀏覽備忘單.
##Bouncer 最初的想法
早在2015 年8 月,Taylor 新增了一個Laravel 5.2 中的新授權系統,稱為 Gate。這提供了一個很好用的API,用於應用程式中定義各種操作的權限檢查,
簡單 定義 回呼
和完整的 policies,以及根據您定義的內容在整個系統中掛接檢查權限。
ACL 的未來。真是太好了,Taylor 對清晰和直觀的 API 有這種驚人的感覺,而「Gate」抽象真正揭示了這一點。
然而,內建授權系統缺少一件事:動態權限,儲存在資料庫中。建立 Gate 的方式,所有檢查都由應用程式中定義的硬編碼函數執行,因此無法讓您的管理員在執行時透過某些儀表板 UI 控制其中任何一個。正如泰勒的 原始提交 明確指出:
[內建 Gate] 為組織邏輯提供了一種結構,該邏輯授權對實體進行操作。它沒有對「使用者角色」的定義做出任何決定。當時,還有許多其他流行的
ACL 作業系統支援在運行時調整權限,但它們有一個主要缺點:它們都是在Laravel 的Gate 之前建構的。它們是完全分離的系統;如果您決定使用它們,您將放棄 Laravel 的 gate 提供的所有細節和漂亮的整合。
我們在 Laravel 5.3 中對 gate 檢查做了一些改進,使其更加簡化和可預測,從而更容易將這些功能儲存在資料庫中。
Bouncer 的名稱和 logo
我很早就想到了「保鑣」(Bouncer) 這個名字。保鑣 的職責是在門口提供安全保障並檢查人們的權限。所以這是與 Laravel 中的“Gate”非常自然的配對。
有趣的是,當時與我合作的標誌設計師(不是以英語為母語的人)沒有得到參考。以下是他設計的一些原始 logo:
技术基础
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 處於一個非常好的位置。每個好的產品都有一個漫長的路線圖,認為我可以在發布 1.0 之前走到這條路的盡頭,這是愚蠢和不切實際的。
享受使用它!
好了,到此為止。我希望您嘗試在您的應用程式中使用 Bouncer,並享受使用它。 Bouncer 的 API 被設計的像散文一樣,每個方法呼叫讀起來都像是合適的英文句子。試一試,如果您也有這種感覺,請告訴我!
【相關推薦:laravel影片教學】
以上是Laravel擴充建議:角色和權限管理工具'Bouncer”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

PHP和Laravel不是直接可比的,因為Laravel是基於PHP的框架。 1.PHP適合小型項目或快速原型開發,因其簡單直接。 2.Laravel適合大型項目或高效開發,因其提供豐富功能和工具,但學習曲線較陡,性能可能不如純PHP。

laravelisabackendframeworkbuiltonphp,設計ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

本文討論了Laravel中的創建和使用自定義刀片指令以增強模板。它涵蓋了定義指令,在模板中使用它們,並在大型項目中管理它們,強調了改進的代碼可重複性和R等好處

本文討論了使用組件在Laravel中創建和自定義可重複使用的UI元素,從而為組織提供最佳實踐並建議增強包裝。

文章討論了使用Laravel的路由來創建SEO友好的URL,涵蓋最佳實踐,規範的URL和SEO優化工具。WordCount:159


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境