Drupal → Запретить анонимам ставить флаг чаще одного раза в день с одного ip

18.11.2019

В модуле 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
Похожие записи

Комментарии

Гость
21.11.2019, 13:10

Читаю заголовок и думаю: опять в России какой-то закон приняли против россиян, потом доходит - это же про Drupal :) Ты красавчег, столько нового опять разместил. Я буквально на твоих постах, изучил Друпал и сразу следом за тобой, перешел на Восьмерку, теперь и ее, с тобой изучаю

Добавить комментарий