Laravel 中的授权 - 初学者指南

DDD
发布: 2024-09-13 08:15:31
原创
868 人浏览过

Authorization In Laravel - A Beginner

掌握 Laravel 中的授权:Gates 与策略类 ??

在现代 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学习者快速成长!