Скрытие полей в ресурсах API с помощью Gates в Laravel
В моем приложении есть ресурс 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,
];
}
В моем приложении есть несколько ролей, например, администратор, зритель. Когда администратор обращается к api, api возвращает все поля, но когда зритель обращается к api, он возвращает только ограниченные поля.
Как я могу справиться с этим, используя Gates & Policies
?
Могу я сделать что-то подобное
'createdAt' => $this->when($this->authorize('product.list'), $this->created_at)
1 ответ
Вы можете использовать красноречивый аксессуар в своемProduct
модель:
public function getCreatedAtAttribute($createdAt)
{
if (Gate::allows('see-product-details', $this)) {
return $createdAt;
} else {
return null;
}
}
Конечно, вы также должны написать see-product-details
Ворота.
В противном случае это может сработать (не проверено):
public function getCreatedAtAttribute($createdAt)
{
if ($this->authorize('view', [Product::class, $this])) {
return $createdAt;
} else {
return null;
}
}