Laravel 中的授權 - 初學者指南

DDD
發布: 2024-09-13 08:15:31
原創
869 人瀏覽過

Authorization In Laravel - A Beginner

掌握 Laravel 中的授權:蓋茲與策略類別?

在現代 Web 應用程式中,控制誰可以存取或修改資源至關重要。例如,在部落格應用程式中,您可能希望確保只有貼文的擁有者才能編輯或刪除它。 Laravel 提供了兩種優雅的方式來處理授權:GatesPolicy Classes。本指南將引導您完成這兩種方法,向您展示如何保護您的資源並確保應用程式的安全。

Laravel 的蓋茲?

Gate 提供了一種快速而直接的方法來使用閉包處理授權。它們非常適合簡單的授權檢查,並在 AuthServiceProvider 中定義。

設定門

讓我們定義一個門來確保只有帖子所有者才能更新或刪除帖子:

  1. 定義 Gate:開啟 AuthServiceProvider 並加入您的 Gate 定義:

    // app/Providers/AuthServiceProvider.php
    
    use Illuminate\Support\Facades\Gate;
    use App\Models\Post;
    
    public function boot()
    {
        $this->registerPolicies();
    
        Gate::define('update-post', function ($user, Post $post) {
            return $user->id === $post->user_id;
        });
    
        Gate::define('delete-post', function ($user, Post $post) {
            return $user->id === $post->user_id;
        });
    }
    
    登入後複製
  2. 應用閘:在控制器方法中使用閘來強制執行授權邏輯:

    // app/Http/Controllers/PostController.php
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Gate;
    use App\Models\Post;
    
    public function update(Request $request, Post $post)
    {
        if (Gate::denies('update-post', $post)) {
            abort(403, 'You do not own this post. ?');
        }
    
        // Proceed with updating the post
    }
    
    public function destroy(Post $post)
    {
        if (Gate::denies('delete-post', $post)) {
            abort(403, 'You do not own this post. ?');
        }
    
        // Proceed with deleting the post
    }
    
    登入後複製

蓋茲的優點和缺點

優點

  • 簡單:使用最少的程式碼即可快速設定。 ⚡
  • 簡單的理想選擇:非常適合單一資源應用程式或簡單的場景。 ?

缺點

  • 可擴充性:隨著應用程式的成長,可能會變得麻煩且難以管理。 ?
  • 維護:如果組織不好,可能會變得混亂。 ?

最佳用例:需要快速授權檢查的小型應用程式或簡單用例。 ?

Laravel 中的策略類別? ️

策略類別提供了一種更結構化和可擴展的方法來處理授權。它們提供了一種清晰的方法來管理複雜的授權規則並保持程式碼井井有條。當使用包含標準CRUD 操作的資源控制器時,策略特別有用:indexcreateeditupdate摧毀

建立和使用策略

  1. 產生策略:使用 Artisan 建立策略類別:

    php artisan make:policy PostPolicy
    
    登入後複製
  2. 定義策略方法:開啟產生的策略類別並新增方法來處理每個操作的授權:

    // app/Policies/PostPolicy.php
    
    namespace App\Policies;
    
    use App\Models\User;
    use App\Models\Post;
    
    class PostPolicy
    {
        /**
         * Determine if the user can view the list of posts.
         *
         * @param User $user
         * @return bool
         */
        public function viewAny(User $user)
        {
            // Example logic to allow viewing posts for authenticated users
            return true;
        }
    
        /**
         * Determine if the user can create a post.
         *
         * @param User $user
         * @return bool
         */
        public function create(User $user)
        {
            return true;
        }
    
        /**
         * Determine if the user can update the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function update(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    
        /**
         * Determine if the user can delete the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function delete(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    }
    
    登入後複製
  3. 使用策略:在控制器操作上應用策略方法:

    // app/Http/Controllers/PostController.php
    
    use Illuminate\Http\Request;
    use App\Models\Post;
    
    public function update(Request $request, Post $post)
    {
        $this->authorize('update', $post);
        // Proceed with updating the post
    }
    
    public function destroy(Post $post)
    {
        $this->authorize('delete', $post);
        // Proceed with deleting the post
    }
    
    登入後複製

策略類別的優缺點

優點

  • 組織:提供一種乾淨且有組織的方式來處理複雜的授權邏輯。 ?
  • 可維護性:隨著應用程式的成長,更容易管理和維護。 ?️
  • 框架支援:利用 Laravel 內建的框架支援來實現一致的授權。 ?

缺點

  • 初始設定:與門相比,設定稍微多一些。 ⚙️
  • 複雜度:對於非常簡單的授權場景可能有點過頭了。 ?

最佳案例場景:非常適合具有複雜授權要求的應用程式或目標是乾淨、可維護的程式碼。 ?


概括

Laravel 中的 Gates 和 Policy 類別都提供了處理授權的強大方法。門非常適合快速、簡單的檢查,而策略類別提供了管理複雜場景的結構化方法,特別是在具有indexcreateedit、更新銷毀。選擇最適合您的應用程式需求的方法,並享受安全、組織良好的程式碼庫! ??

以上是Laravel 中的授權 - 初學者指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!