Показати сторінкуСтарі ревізіїПосилання сюдиЕкспорт до PDFПовернутися наверх Ця сторінка доступна тільки для перегляду. Ви можете продивитися вихідний текст, але не можете змінювати його. Якщо ви вважаєте, що це не вірно, зверніться до адміністратора. ====== Створення модулів послуг ====== Послуга NoDeny - це запис у таблиці users_services, яка наділяє обліковий запис клієнта певними характеристиками, наприклад, дозволяє доступ в інтернет. Поле tags зберігає через кому теги, що вказують на характер дії послуги, наприклад, стандартні: * inet - дозволяє доступ в інтернет * speed - керує швидкістю доступу в інтернет * realip – вказує видавати клієнту реальний («білий») ip Показати всіх клієнтів, у яких підключено послугу, яка дає доступ в інтернет <code> SELECT uid FROM users_services WHERE tags LIKE '%, inet, %'; </code> На один обліковий запис можна активувати кілька різних послуг, наприклад, клієнт може замовити послугу «доступ до інтернету 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 <code> #!/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; </code> Модуль послуги повинен мати такі підпрограми: * description : підказка адміну, що робить модуль. Виводиться під час створення послуги в адмінці. * tunes: повертає посилання на масив додаткових полів. * set_service: повертає список дій, які необхідно зробити при підключенні послуги. У прикладі підпрограма tunes повертає посилання на порожній масив, тобто додаткових полів немає. set_service вказує зробити лише одну дію: платіж з категорією 100. ====== Дії ====== Підпрограма set_service має повернути список дій, які будуть виконані при підключенні послуги: * sql - виконання sql запиту(ів). <code> $actions->{sql}{1} = [ 'INSERT INTO tbl SET field=?', 'xxx' ]; </code> * pay - створення платежу таблиці pays. <code>$actions->{pay} = { cash => 10, comment => 'Поповнення рахунку на 10$', category=> 2, }; </code> * set_service - послуга відображатиметься у списку підключених послуг. <code>$actions->{set_service} = { period => 60*60, mode => 0, tags => ',x-tag,', }; </code> Тут у масиві @$fields зберігаються ті специфічні параметри, про які було сказано вище: термін дії, що входить і вихідна швидкість. У описі полів ключ type вказує тип поля за класом Data, наприклад, 1 - ціле позитивне число. Значення value буде запропоновано адміністратору під час створення послуги. Метод set_service повинен повернути хеш – список дій, які виконає модуль services при підключенні послуги. У прикладі: * pay - вказівка змінити баланс клієнта та створити відповідний платіж `зняття за послуги`; * set_service – створення запису з параметрами послуги. Будь-яка з дій необов'язкова, проте формат конкретних дій є суворим. nodeny/docs/services.txt Востаннє змінено: 25/01/2023 22:22повз Method Увійти