代码之家  ›  专栏  ›  技术社区  ›  DiTrain

如何根据策略筛选API资源

  •  0
  • DiTrain  · 技术社区  · 11 月前

    我需要根据定义的策略过滤集合。但是什么也得不到,有人能给我指出正确的方向吗。

    也许可以在控制器中进行检查。然而,在API资源中这样做似乎是合乎逻辑的。据我所知,API资源的全部目的是在自定义&量身定制的方式。

    <?php
    
    namespace App\Http\Resources;
    
    use Illuminate\Http\Request;
    use Illuminate\Http\Resources\Json\JsonResource;
    
    use Illuminate\Support\Facades\Auth;
    
    
    class UserResource extends JsonResource
    {
        /**
         * Transform the resource into an array.
         *
         * @return array<string, mixed>
         */
        public function toArray(Request $request): array
        {
            return [
                'name' => $this->name,
                'email' => $this->email,
                'client_id' => $this->client->id,
                'role' => $this->role->name,
                'accessible_projects' => $this->client->projects->filter(function ($item)
                    {
                        Auth::user()->can('view', $item);
                    }
                ),    
            ];
        }
    }
    
    1 回复  |  直到 11 月前
        1
  •  0
  •   geertjanknapen    11 月前

    您在筛选器回调中没有返回任何内容。

    看一看 at the documentation 对于过滤方法。

    你需要这样的东西 return Auth::user()->can('view', $item);

    因此,完整的代码如下:;

    return [
        'name' => $this->name,
        'email' => $this->email,
        'client_id' => $this->client->id,
        'role' => $this->role->name,
        'accessible_projects' => $this->client->projects->filter(function ($item)
            {
                return Auth::user()->can('view', $item);
            }
        ),    
    ];