nodeny:docs:services

Це стара версія документу!


Створення модулів послуг

Послуга NoDeny - це запис у таблиці users_services, яка наділяє обліковий запис клієнта певними характеристиками, наприклад, дозволяє доступ в інтернет.

Поле tags зберігає через кому теги, що вказують на характер дії послуги, наприклад, стандартні:

  • inet - дозволяє доступ в інтернет
  • speed - керує швидкістю доступу в інтернет
  • realip – вказує видавати клієнту реальний («білий») ip

Показати всіх клієнтів, у яких підключено послугу, яка дає доступ в інтернет

SELECT uid FROM users_services WHERE tags LIKE '%, inet, %';

На один обліковий запис можна активувати кілька різних послуг, наприклад, клієнт може замовити послугу «доступ до інтернету 2 Мбіт/сек», а через час «підвищення швидкості в 2 рази на 1 день». Ці послуги можуть співіснувати разом, при цьому перша матиме теги inet та speed, а друга лише speed.

У таблиці users_services зберігаються персональні клієнта властивості послуги, а загальні у таблиці services. Зв'язок полем service_id. У свою чергу, в таблиці services поле module посилається на модуль, який обробляє даний тип послуг.

Персональні властивості послуги: час старту послуги, час закінчення послуги, теги, id послуги, яка буде підключена після закінчення поточного та id платежу, в якому відбувається списання грошей за послугу.

Послуга то, можливо «вічної», тобто. не мати часу закінчення, доки адміністратор не видалить її. Послуга може бути безкоштовною, тобто id платежу = 0. Послуга може мати автоподовження, тобто. id послуги, яка буде встановлена після завершення поточної = 0.

Загальні властивості послуги задаються у таблиці services: ім'я, опис, групи клієнтів, які можуть замовити послугу, вартість. Також у закодованому вигляді містяться параметри специфічні для конкретного модуля послуг. Оскільки неможливо передбачити всі можливі властивості для всіх послуг, специфічні параметри зберігаються у вигляді perl-дампа в полі param.

Поле module посилається на файл, який обробляє послугу. Приклад такого файлу:

файл /usr/local/nodeny/services/test.pm

#!/usr/bin/perl
package services::test;
use strict;

sub description
{
     return 'Послуга нічого не робить, просто знімає гроші';
}

sub tunes
{
     return [];
}

sub set_service
{
     my(undef, %p) = @_;
     my $service_new = $p{service_new};
     my $actions = $p{actions};
     $actions->{pay} = {
         cash => 0 - $service_new->{price},
         comment => $service_new->{description},
         category=> 100,
         discount=>$service_new->{discount},
     };
}

1;

Модуль послуги повинен мати такі підпрограми:

  • description : підказка адміну, що робить модуль. Виводиться під час створення послуги в адмінці.
  • tunes: повертає посилання на масив додаткових полів.
  • set_service: повертає список дій, які необхідно зробити при підключенні послуги.

У прикладі підпрограма tunes повертає посилання на порожній масив, тобто додаткових полів немає. set_service вказує зробити лише одну дію: платіж з категорією 100.

Дії

Підпрограма set_service має повернути список дій, які будуть виконані при підключенні послуги:

  • sql - виконання sql запиту(ів). $actions→{sql}{1} = [

'INSERT INTO tbl SET field=?', 'xxx'

   ];
  • pay - створення платежу таблиці pays. $actions→{pay} = {

cash ⇒ 10,

       comment => 'Поповнення рахунку на 10$',
       category=> 2,
   };
  • set_service - послуга відображатиметься у списку підключених послуг. $actions→{set_service} = {

period ⇒ 60*60,

       mode => 0,
       tags => ',x-tag,',
   };

Тут у масиві @$fields зберігаються ті специфічні параметри, про які було сказано вище: термін дії, що входить і вихідна швидкість. У описі полів ключ type вказує тип поля за класом Data, наприклад, 1 - ціле позитивне число. Значення value буде запропоновано адміністратору під час створення послуги.

Метод set_service повинен повернути хеш – список дій, які виконає модуль services при підключенні послуги. У прикладі:

  • pay - вказівка змінити баланс клієнта та створити відповідний платіж `зняття за послуги`;
  • set_service – створення запису з параметрами послуги.

Будь-яка з дій необов'язкова, проте формат конкретних дій є суворим.

Цей сайт використовує кукі. Перебуваючи тут, ви погоджуєтеся з їх зберіганням на вашому комп'ютері. Також ви підтверджуєте, що прочитали і зрозуміли нашу Політику конфіденційності. Якщо ви не згодні - покиньте сайт.Більше інформації про куки
  • nodeny/docs/services.1674685162.txt.gz
  • Востаннє змінено: 25/01/2023 22:19
  • повз Method