溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel角色和權限管理工具Bouncer有什么功能

發布時間:2022-11-01 09:05:07 來源:億速云 閱讀:119 作者:iii 欄目:編程語言

這篇文章主要介紹了Laravel角色和權限管理工具Bouncer有什么功能的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Laravel角色和權限管理工具Bouncer有什么功能文章都會有所收獲,下面我們一起來看看吧。

什么是 Bouncer?#

Bouncer 是一個開源包,用于動態管理數據庫中的角色和權限,與 Laravel 的 Gate 完全集成。

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

  • Simple abilities:


    Bouncer::allow($user)->to('access-dashboard');
  • Model abilities:


    Bouncer::allow($user)->to('view', Invoice::class);
    Bouncer::allow($user)->to('delete', $invoice);
  • Flexible roles:


    Bouncer::allow('admin')->everything();
    Bouncer::assign('admin')->to($user);
  • Forbidding abilities:


    Bouncer::allow($user)->to('view', Invoice::class);
    Bouncer::forbid($user)->to('view', $confidentialInvoice);
  • Powerful ownership:


    Bouncer::allow($user)->toOwn(Post::class);
  • Straighforward multi-tenancy:


    Bouncer::scope()->to($tenantId);
  • Built-in caching


    Bouncer::cache();

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'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);

關于“Laravel角色和權限管理工具Bouncer有什么功能”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Laravel角色和權限管理工具Bouncer有什么功能”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女