搜尋
首頁php框架LaravelLaravel擴充建議:角色和權限管理工具'Bouncer”

Laravel擴充建議:角色和權限管理工具'Bouncer”

經過多年開發,56 次發布,130 萬下載,並且超過 2800 的主動關注 Bouncer 終於來到了 1.0 版本。在相當長的一段時間裡,它一直非常可靠和穩定,並被世界各地無數的 app 用於生產。

這是我個人的更新,包含了我多年來的一些思考 —— 從最初到最終發行。關於如何每天使用 Bouncer 的技術信息,請查看 the extensive documentation 或在 The Laravel Podcast 聽我和馬特・斯托弗討論。


什麼是Bouncer?

##在開始我的個人旅程之前,這裡先簡單介紹Bouncer 是什麼,以及它如何融入更大的Laravel 生態系統。

Bouncer 是一個開源包,用於動態管理資料庫中的角色和權限,與 Laravel 的 Gate 完全整合。

在不深入細節的情況下,以下是其一些主要功能的簡短清單:

... 還有更多。有關詳細信息,請查看完整的文檔,或只需瀏覽備忘單.

##Bouncer 最初的想法

早在2015 年8 月,

Taylor 新增了一個Laravel 5.2 中的新授權系統,稱為 Gate。這提供了一個很好用的API,用於應用程式中定義各種操作的權限檢查,簡單 定義 回呼 和完整的 policies,以及根據您定義的內容在整個系統中掛接檢查權限

當我開始使用它時,我就知道這將是所有 Laravel 應用程式的

ACL 的未來。真是太好了,Taylor 對清晰和直觀的 API 有這種驚人的感覺,而「Gate」抽象真正揭示了這一點。

然而,內建授權系統缺少一件事:動態權限,儲存在資料庫中。建立 Gate 的方式,所有檢查都由應用程式中定義的硬編碼函數執行,因此無法讓您的管理員在執行時透過某些儀表板 UI 控制其中任何一個。正如泰勒的 原始提交 明確指出:

[內建 Gate] 為組織邏輯提供了一種結構,該邏輯授權對實體進行操作。它沒有對「使用者角色」的定義做出任何決定。

當時,還有許多其他流行的

ACL 作業系統支援在運行時調整權限,但它們有一個主要缺點:它們都是在Laravel 的Gate 之前建構的。它們是完全分離的系統;如果您決定使用它們,您將放棄 Laravel 的 gate 提供的所有細節和漂亮的整合。

因此,我決定建立一個開源包,它可以讓您兩全其美:動態資料庫驅動的權限,與 Laravel 的 gate 完全整合。

我們在 Laravel 5.3 中對 gate 檢查做了一些改進,使其更加簡化和可預測,從而更容易將這些功能儲存在資料庫中。

Bouncer 的名稱和 logo

我很早就想到了「保鑣」(Bouncer) 這個名字。

保鑣 的職責是在門口提供安全保障並檢查人們的權限。所以這是與 Laravel 中的“Gate”非常自然的配對。

有趣的是,當時與我合作的標誌設計師(不是以英語為母語的人)沒有得到參考。以下是他設計的

一些原始 logo

Laravel擴充建議:角色和權限管理工具Bouncer”

#右邊的兩個顯然是受到彈跳動作的啟發。

在快速闡明了保鑣這個字的意思之後,我們開始迭代實際的保鑣 logo。我們嘗試了友善的保鑣、威脅的保鑣、大鬍子的保鑣、方下巴的保鏢,以及大量不同的變體。這裡只是少數:

Laravel擴充建議:角色和權限管理工具Bouncer”

我非常喜歡我們最終得到的結果:

Laravel擴充建議:角色和權限管理工具Bouncer”

它散發出強烈的安全感,但它的圓潤讓人感覺更友好,威脅更小

技术基础

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 的源碼,你會發現一些 代碼測試 我開始實現這個的地方。它遠未完成,但請繼續關注。

總的來說,Bouncer 處於一個非常好的位置。每個好的產品都有一個漫長的路線圖,認為我可以在發布 1.0 之前走到這條路的盡頭,這是愚蠢和不切實際的。

享受使用它!

好了,到此為止。我希望您嘗試在您的應用程式中使用 Bouncer,並享受使用它。 Bouncer 的 API 被設計的像散文一樣,每個方法呼叫讀起來都像是合適的英文句子。試一試,如果您也有這種感覺,請告訴我!

【相關推薦:laravel影片教學

以上是Laravel擴充建議:角色和權限管理工具'Bouncer”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
Laravel和後端:為Web應用程序提供動力邏輯Laravel和後端:為Web應用程序提供動力邏輯Apr 11, 2025 am 11:29 AM

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

為什麼Laravel如此受歡迎?為什麼Laravel如此受歡迎?Apr 02, 2025 pm 02:16 PM

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

django或laravel哪個更好?django或laravel哪個更好?Mar 28, 2025 am 10:41 AM

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

哪個是更好的PHP或Laravel?哪個是更好的PHP或Laravel?Mar 27, 2025 pm 05:31 PM

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

Laravel是前端還是後端?Laravel是前端還是後端?Mar 27, 2025 pm 05:31 PM

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

如何在Laravel中創建和使用自定義刀片指令?如何在Laravel中創建和使用自定義刀片指令?Mar 17, 2025 pm 02:50 PM

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

如何使用Laravel的組件來創建可重複使用的UI元素?如何使用Laravel的組件來創建可重複使用的UI元素?Mar 17, 2025 pm 02:47 PM

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

如何使用Laravel的路由功能來創建SEO友好的URL?如何使用Laravel的路由功能來創建SEO友好的URL?Mar 17, 2025 pm 02:43 PM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

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

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境