Помощь с hook_entity_access

Главные вкладки

Аватар пользователя gera8774 gera8774 24 апреля в 16:02

Всем здравствуйте! Не могу разобраться с 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();
}
}

Где я лажаю? Или может вообще лучше какое-то другое решение для этой задачи?

Комментарии

Аватар пользователя Andruxa Andruxa 24 апреля в 17:10

вот тут: in_array('administrator', $account->getRoles())
доступ будет закрыт для пользователя с ролью администратора.
И насчет $operation == 'update' - там точно update, а не edit?
Ну и проверять лучше не роль, а объявить в mymodule.permissions.yml отдельное разрешение на редактирование, и проверять $account->hasPermission('разрешение')

Аватар пользователя gera8774 gera8774 24 апреля в 18:27

Спасибо) Код взяла с интернетов, тоже обратила внимание на in_array. У меня прописано !in_array, не работало. Я уже и так и эдак. Но в общем, дело было в кэше Smile
Проверять разрешения в permissions.yml в моем случае как я понимаю не вариант. У меня же в перспективе на каждую сущность для одного пользователя могут быть разные права. Есть галочка - смотрящий, нет галочки - правящий.