Всем здравствуйте! Не могу разобраться с hook_entity_access
В чем план.
Если у определенного материала поставлена галочка в определенном поле, этот материал становится недоступен для редактирования для всех кроме администратора. Остальные могут на него только смотреть. То есть, если контентщик поставил галочку в это поле, то после этого редактировать эту сущность он больше не сможет.
Пробую hook_entity_access. Для начала хочу просто попробовать закрыть полностью все материалы определенного типа от редактирования для всех ролей кроме админа. Не работает
use Drupal\Core\Access\AccessResult;
function mymodule_entity_access(\Drupal\Core\Entity\EntityInterface $entity, $operation, \Drupal\Core\Session\AccountInterface $account) {
if ($entity->getEntityTypeId() == 'node' && $entity->getType() == 'my_type_entity' && $operation == 'update' && in_array('administrator', $account->getRoles())) {
return AccessResult::forbidden();
}
}
Где я лажаю? Или может вообще лучше какое-то другое решение для этой задачи?
Комментарии
вот тут:
in_array('administrator', $account->getRoles())
доступ будет закрыт для пользователя с ролью администратора.
И насчет
$operation == 'update'
- там точно update, а не edit?Ну и проверять лучше не роль, а объявить в mymodule.permissions.yml отдельное разрешение на редактирование, и проверять
$account->hasPermission('разрешение')
Спасибо) Код взяла с интернетов, тоже обратила внимание на in_array. У меня прописано !in_array, не работало. Я уже и так и эдак. Но в общем, дело было в кэше
Проверять разрешения в permissions.yml в моем случае как я понимаю не вариант. У меня же в перспективе на каждую сущность для одного пользователя могут быть разные права. Есть галочка - смотрящий, нет галочки - правящий.