Разрешить подключать услугу только один раз: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
 
(Не показані 4 проміжні версії цього користувача)
Рядок 2: Рядок 2:
Имеется акционная услуга «интернет за 50% стоимости» или, например, «Один месяц бесплатно». Необходимо разрешить абоненту подключить даннную услугу только один раз. Даже если после нее будет подключена иная или будет несколько смен на иные, больше никогда не будет разрешено подключить данную услугу.
Имеется акционная услуга «интернет за 50% стоимости» или, например, «Один месяц бесплатно». Необходимо разрешить абоненту подключить даннную услугу только один раз. Даже если после нее будет подключена иная или будет несколько смен на иные, больше никогда не будет разрешено подключить данную услугу.


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


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

Поточна версія на 18:26, 11 січня 2021

Задача

Имеется акционная услуга «интернет за 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 (не существует) платежа о списание с комментарием как у текущей услуги

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

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