• laravel 策略类


    Policy(策略)是用于组织基于特定模型或资源的授权逻辑类,例如,如果你开发的是一个博客应用,可以有一个 Post 模型和与之对应的 PostPolicy 来授权用户创建或更新博客的动作。

    • 创建一个policy.php文件,比如说要个post模型创建授权逻辑类,php artisan make:policy PostPolicy
    • 创建成功之后,会出现在app/policies的文件夹中
    • 然后在app/providers/AuthServiceProvider中的数组$policies中添加
      //之前会有一个示例,如果没有用的话。可以注释
      
      'AppPost' => 'AppPoliciesPostPolicy',
    • 添加完成之后,在PostPolicy.php中可以写自己需要设置权限的方法,例如update和delete两个方法
      <?php
      
      namespace AppPolicies;
      
      use AppUser;
      use AppPost;
      use IlluminateAuthAccessHandlesAuthorization;
      
      class PostPolicy
      {
          use HandlesAuthorization;
      
          /**
           * Create a new policy instance.
           *
           * @return void
           */
          public function __construct()
          {
              //
          }
      
          public function update(User $user, Post $post)
          {
            //判断修改改文章的是不是本文作者
              return $user->id === $post->user_id;
          }
          public function delete(User $user,Post $post)
          {
              //判断修改改文章的是不是本文作者
              return $user->id===$post->user_id;
          }
      
      }
    • 在controller中,需要进行验证的方法中进行判断权限
      //只属于本文作者对该文章进行删除操作
      public function delete(Post $post)
          {
              $this->authorize('delete',$post);
              $post->delete();
              return redirect('article/index');
          }

      除了提供给 User 模型的辅助函数,Laravel 还为继承自 AppHttpControllersController 基类的所有控制器提供了 authorize 方法,和 can 方法类似,该方法接收你想要授权的动作名称以及相应模型实例作为参数,如果动作没有被授权, authorize 方法将会抛出 IlluminateAuthAccessAuthorizationException ,Laravel 默认异常处理器将会将其转化为状态码为 403 的 HTTP 响应:

  • 相关阅读:
    Redis学习篇(一)之String类型及其操作
    MySQL笔记(五)之表的连接
    MySQL笔记(三)之数据插入更新与删除
    MySQL笔记(四)之内建函数
    MySQL笔记(二)之数据检索常用关键字
    MySQL笔记(一)之新建数据库和数据表
    京东文胸数据分析
    用SpringSecurity从零搭建pc项目-02
    Spring Security构建Rest服务-0800-Spring Security图片验证码
    用SpringSecurity从零搭建pc项目-01
  • 原文地址:https://www.cnblogs.com/hanmengya/p/10908725.html
Copyright © 2020-2023  润新知