В модуле Flag анонимный юзер может бесконечно флагать одну сущность просто удаляю куку с сессией, что неприемлемо например при реализации лайков. Чтобы это запретить нужно:
1. В админке добавить флагу текстовое поле field_ip
.
2. Написать код:
/**
* Implements hook_ENTITY_TYPE_presave(): flagging.
*/
function MODULENAME_flagging_presave(FlaggingInterface $flagging) {
// Save user ip
if ($flagging->hasField('field_ip')) {
$flagging->set('field_ip', \Drupal::request()->getClientIp());
}
// Disable anonym flagging on same ip
if ($flagging->getFlagId() == 'my_flag' && \Drupal::currentUser()->isAnonymous()) {
$flagging_count = \Drupal::entityQuery('flagging')
->condition('flag_id', $flagging->getFlagId())
->condition('field_ip', \Drupal::request()->getClientIp())
->condition('entity_id', $flagging->getFlaggableId())
->condition('uid', 0)
->condition('created', strtotime('-1 day'), '>')
->count()
->execute();
if ($flagging_count > 0) {
throw new \LogicException('With your ip today have already voted.');
}
}
}
3. Сбросить кэш.
Написанное актуально для
Flag 8.x-4.x
Похожие записи
- Изменение результата ajax запроса на примере выполнения своей ajax-команды при установке/снятии флага
- Показать форму входа при попытке анонимного пользователя поставить флаг
- Вставка в CKEditor видео из ВКонтакте и Rutube (расширение модуля CKEditor 5 Media Embed)
- Как из PhpStorm выполнить тест(ы)
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
Комментарии
Читаю заголовок и думаю: опять в России какой-то закон приняли против россиян, потом доходит - это же про Drupal :) Ты красавчег, столько нового опять разместил. Я буквально на твоих постах, изучил Друпал и сразу следом за тобой, перешел на Восьмерку, теперь и ее, с тобой изучаю
Добавить комментарий