Привязка ip к login
Если к учетной записи подключено несколько ip адресов и есть необходимость выдавать ip в зависимости от логина - этот модуль для вас. В админке напротив ip адреса появится выпадающий список, где можно выбрать число, связанное с данным ip.
Это число будет являться частью логина. Например, у абонента существует учетная запись ivanov и подключены 3 ip и для каждого ip выбрано число (как в видео выше):
10.0.0.205 - 1 10.0.0.206 - 3 10.0.0.207 - 4
Чтобы при авторизации по pppoe ему был выдан адрес 10.0.0.206 необходимо в качестве логина использовать ivanov+3, для 10.0.0.207 -ivanov+4
Чтобы эта схема заработала, необходимо создать mysql-процедуру, которая будет выдавать ip в зависимости от числа в фрагменте логина:
DROP FUNCTION IF EXISTS `get_ip_by_num`; DELIMITER $$ CREATE FUNCTION `get_ip_by_num` ( user_id INTEGER UNSIGNED, num INTEGER ) RETURNS VARCHAR(15) NO SQL BEGIN DECLARE user_ip VARCHAR(15); DECLARE real_ip VARCHAR(15); SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id AND type = 'static' AND tags LIKE CONCAT('%,', num, ',%') LIMIT 1; IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF; SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id AND type='static' LIMIT 1; IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF; SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%'; UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300 WHERE id = (SELECT id FROM ( ( SELECT id, uid FROM ip_pool WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) LIMIT 1 ) UNION ( SELECT id, uid FROM ip_pool WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0) LIMIT 1 ) ) AS tbl ORDER BY uid DESC LIMIT 1); SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool WHERE uid = user_id LIMIT 1; RETURN user_ip; END$$ DELIMITER ;
Проверим ее работоспособность:
SELECT get_ip_by_num(357, 3);
При условии, что id абонента ivanov = 357, должно выдать:
+-----------------------+ | get_ip_by_num(357, 3) | +-----------------------+ | 10.0.0.206 | +-----------------------+