Я пытаюсь установить скрытые атрибуты в модели Eloquent в зависимости от типа роли. Например, макрос, который я написал ниже, адаптирует модели в коллекции, чтобы скрыть поля для данной роли.
Collection::macro('roleRestrict', function () {
switch (true) {
case RoleChecker::isUserGuest():
return $this->map(function (AuthorisedAttributeInterface $model) {
$model->setGuestRoleHiddenFields();
return $model;
});
default:
return $this;
}
});
Который может быть использован с MyModel::all()->roleRestrict()
Можно ли написать подобный макрос, который применяется к одному объекту модели вне коллекции? Это будет выполнено следующим образом:
MyModel::findOrFail($id)->roleRestrict()
Или даже если модель загружена с отношением ownTo:
AnotherModel::with('myModelRelationship')->findOrFail($id)->roleRestrict()
Задача ещё не решена.
Других решений пока нет …