Скрытие полей в ресурсах API с помощью Gates в Laravel - PullRequest
0 голосов
/ 05 февраля 2020

У меня в приложении есть ресурс Product API, например:

    /**
     * Transform the resource collection into an array.
     *
     * @param  Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'desc' => $this->desc,
            'color' => $this->color,
            'amount' => $this->amount,
            'available' => $this->available,
            'createdAt' => $this->created_at,
            'updatedAt' => $this->updated_at,
        ];
    }

У меня мало ролей в приложении, например, admin, viewer. Когда администратор получает доступ к API, API возвращает все поля, но когда зритель обращается к API, он возвращает только ограниченные поля.

Как я могу справиться с этим, используя Gates & Policies?

Могу ли я сделать что-то подобное

'createdAt' => $this->when($this->authorize('product.list'), $this->created_at)

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете использовать Eloquent Accessor в вашей Product модели:

    public function getCreatedAtAttribute($createdAt)
    {
        if (Gate::allows('see-product-details', $this)) {
            return $createdAt;
        } else {
            return null;
        }
    }

Конечно, вы также должны написать see-product-details gate.

В противном случае это может также работать (не проверено):

    public function getCreatedAtAttribute($createdAt)
    {
        if ($this->authorize('view', [Product::class, $this])) {
            return $createdAt;
        } else {
            return null;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...