Разрешить подключать услугу только один раз

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку

Задача

Имеется акционная услуга «интернет за 50% стоимости» или, например, «Один месяц бесплатно». Необходимо разрешить абоненту подключить даннную услугу только один раз. Даже если после нее будет подключена иная или будет несколько смен на иные, больше никогда не будет разрешено подключить данную услугу.

Решение

В настройках акционной услуги:

  • ставим галку «Запрет продления».
  • в параметре «условия»:
NOT EXISTS (SELECT 1 FROM pays WHERE mid=u.id AND category=100 AND comment='Один месяц бесплатно')
  • Здесь то, что написано в одинарныйх кавычках должно один в один соответствовать комментарию в услуги. Если хотя бы один символ не будет соответсвовать, например, в конце комментария будет перевод строки, результат не будет положительным
  • в /usr/local/nodeny/sat.cfg устанавливаем (заменем):
$service_condition_enabled = 1;
  • перезапускаем ядро NoDeny или только модуль ядра services, если возможно

Как это работает

  • $service_condition_enabled = 1 разрешает применять условия в услугах. Эта возможность включается отдельно в sat.cfg поскольку этим самым разрешается выполнение любых sql, которые будут установлены в услугах. Поэтому будьте внимательны и давайте учетку суперадмина исключительно доверенным людям.
  • При подключении услуги, создается платеж с категорий 100 (списание за услуги), в комментариях которого установлен комментарий из услуги
  • При подключении услуги, NoDeny к основному sql добавит условие NOT EXISTS (не существует) платежа о списание с комментарием как у текущей услуги

Комментарий:

  • Если администратор удалит платеж, связанный с услугой - услугу можно будет подключить повторно