Drupal → Запретить анонимам ставить флаг чаще одного раза в день с одного ip
В модуле 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. Сбросить кэш.
Комментарии
Читаю заголовок и думаю: опять в России какой-то закон приняли против россиян, потом доходит - это же про Drupal :) Ты красавчег, столько нового опять разместил. Я буквально на твоих постах, изучил Друпал и сразу следом за тобой, перешел на Восьмерку, теперь и ее, с тобой изучаю
Оставить комментарий