ACP_COPY_USER_PERMISSIONS [Копирования прав юзеров]

Здесь авторы могут постить бета-версии своих модификаций для phpBB 3.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

ACP_COPY_USER_PERMISSIONS [Копирования прав юзеров]

Сообщение Пчелкин »

Возникла необходимость копирования прав между юзерами.
Перебрал все что знал и нашел. Нет такого...
Может у кого есть наметки или наработки? Нужно очень....
Создан мод по этому поводу!!!

Огромное спасибо всем: Татьяна5 , c61 и автору созданного мода - Sheer !!!

Пост с модом вот - Копирование прав юзеров

Отличная работа!!!
А тему, думаю, можно переместить в подфорум Бета-версии модов для phpBB 3.0.x
Изображение

Изображение

Изображение

Изображение

Изображение
Последний раз редактировалось Пчелкин 16.09.2014 14:01, всего редактировалось 7 раз.
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Копирование прав юзеров

Сообщение Татьяна5 »

Чем не подходят роли?
Или поподробней, что именно надо
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

Re: Копирование прав юзеров

Сообщение Пчелкин »

Необходимо точно скопировать все права, все полностью (глобалы, локалы, форумные, юзерские, модерские, админские) с одного юзера на несколько других ... по одному...как только юзер оштрафится - ему копируют права низшего сословия...
Не мне... игровому форуму... Можно просто запросами... Но как??????????
Роли тут не подходят...Пробовал права родительского юзера сделать ролью... не все потом передается... Не все... Сто раз уже проверил...

Добавлено спустя 2 минуты 13 секунд:
Родительскому юзеру слишком много всего понадовано и при том все запутано и много... Вариант тока один у них - копировать юзерские... Искал моды - нема такого...

Добавлено спустя 1 минуту 15 секунд:
Или создать полную сохранялку в роль права любого юзера, но полные его права, без исключений и разделений на локалку, форумные, админские и прочее...
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Копирование прав юзеров

Сообщение Татьяна5 »

Пчелкин писал(а):Вариант тока один
Не факт
Группе "Зарегистрированные пользователи" выдать минимум прав, которые должны быть у всех
Создать группы под каждый вариант прав (и глобальных, и локальных) и добавлять пользователей в нужную группу, предварительно удаляя их из предыдущей. Так и путаницы никакой не возникнет, в отличие от варианта с копированием прав
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

Re: Копирование прав юзеров

Сообщение Пчелкин »

Сейчас так и есть... И Группы сделаны как бЭ невидимыми.... Пап это не устраивает... Они неделю распихивали права одному и теперь хотят чтоб это право одного можно было раздавать (копировать) избранным...
Я пол часа посидел и полностью права родителя скопировал другому...
Но это ведь долго...
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Копирование прав юзеров

Сообщение Татьяна5 »

Не вижу проблем в том, чтобы настроить те же права группе
А в случае с копированием прав пользователя неудобств много: невозможно отследить кому были назначены права, долго копировать вручную, с автоматическим копированием легко получить "кашу" из прав (затронуто несколько таблиц в БД)
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 13 лет 9 месяцев
Благодарил (а): 42 раза
Поблагодарили: 251 раз

Re: Копирование прав юзеров

Сообщение c61 »

Хммм... Можно нарисовать скриптик, который выковыривает требуемые данные ($src_user_id - id юзера с правами, которые хотим запихать в $dst_user_id - id юзера для которого заменяем права):
- таблица users, user_permissions для $src_user_id
- таблица user group (всё для $src_user_id)
- таблица acl_users (всё для $src_user_id)
затем скриптик мочит (заменяет) в вышеперечисленных таблицах всё для $dst_user_id и меняет группу (надеюсь, ничего не забыл).

На первый взгляд простой скрипт. Полезно навернуть интерфейс и запихнуть в админку или stk, такой инструмент мне тоже иногда бывает нужен...
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Копирование прав юзеров

Сообщение Татьяна5 »

Уже не помню с чем сталкивалась при копировании прав вручную в БД, но какой-то "подводный камень" там был
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

Re: Копирование прав юзеров

Сообщение Пчелкин »

Был, был... Особенно форумные врукопашную - очень морочно... При 25 подфорумов практически запутаться запросто...
Еще можно вариант такой - создание точного клона со всеми правами от юзера-родителя и соединение с ним нужного для передачи прав с последующим уничтожением того клона... но опять же - как?
c61 писал(а):такой инструмент мне тоже иногда бывает нужен...
При том есть мощная причина это иметь - замена основателя с одного на другого... для запутаницы... И безопасности. Особенно если форум слишком серьезный и с большим количеством серьезной документации (юридической) как прием против лома (взлома)

Одним словом - гуляющий по юзерам основатель... (как пример, не как цель наработки)
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 13 лет 9 месяцев
Благодарил (а): 42 раза
Поблагодарили: 251 раз

Re: Копирование прав юзеров

Сообщение c61 »

Вот нарисовал на досуге и проверил в первом приближении. Запускать под админом, параметры src и dst (id юзеров). Заинтересованные могут проверить (с осторожностью, на неживых юзерах) и облагородить вплоть до создания мода.

Код: Выделить всё

<?php
/**
*
* @package phpBB3
* @version $Id: $
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
* @copyright (c) 2013 Serg c61@yandex.ru http://c61.su
* @mod: clone user permissions
* @version 0.0.1
*
*/

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

$user->session_begin();
$auth->acl($user->data);

if (!$auth->acl_get('a_'))
{
	trigger_error($user->lang['NO_ADMIN']);
}

function traccer($message, $exit = true)
{
	echo $message . '<br />';
	if ($exit) exit;
}

traccer('Clone PHPBB user permissions START...',false);

traccer('Get Parameters',false);

$src_user_id = request_var('src',0);
$dst_user_id = request_var('dst',0);

if ( !$src_user_id )
{
	traccer('ERROR ! Src user not defined');
}
traccer('Src user ID = '.$src_user_id,false);
if ( !$dst_user_id )
{
	traccer('ERROR ! Dst user not defined');
}
traccer('Dst user ID = '.$dst_user_id,false);
if ( $src_user_id == $dst_user_id )
{
	traccer('Src and Dst users are identical');
	exit;
}

traccer('Get Src and Dst users permissions',false);

$sql = 'SELECT user_permissions, group_id FROM ' . USERS_TABLE . ' WHERE user_id = ' . $src_user_id . ' AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ( empty($row) )
{
	traccer('ERROR ! Cannot get Src user permissions or illegal user id');
}
$src_user_permissions = $row['user_permissions'];
$src_user_group_id = $row['group_id'];
$db->sql_freeresult($result);

$sql = 'SELECT user_permissions FROM ' . USERS_TABLE . ' WHERE user_id = ' . $dst_user_id . ' AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ( empty($row) )
{
	traccer('ERROR ! Cannot get Dst user permissions or illegal user id');
}
$dst_user_permissions = $row['user_permissions'];
$db->sql_freeresult($result);

if ( $src_user_permissions == $dst_user_permissions )
{
	traccer('Src and Dst user permissions are identical, continue anyway',false);
}

traccer('Set Dst user permissions',false);

$sql = 'UPDATE ' . USERS_TABLE . ' SET user_permissions = "' . $src_user_permissions . '" WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

traccer('Get Src user ACL',false);

$sql = 'SELECT * FROM ' . ACL_USERS_TABLE . ' WHERE user_id = ' . $src_user_id;
$result = $db->sql_query($sql);
if ( empty($result) )
{
	traccer('ERROR ! Cannot get Src user ACL');
}
$src_user_acl = array();
while ($row = $db->sql_fetchrow($result))
{
	$src_user_acl[] = $row;
}
$db->sql_freeresult($result);

traccer('Delete Dst user ACL',false);

$sql = 'DELETE FROM ' . ACL_USERS_TABLE . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

traccer('Set Dst user ACL',false);

if ( !empty($src_user_acl) )
{
	foreach($src_user_acl as $dst)
	{
		$dst['user_id'] = $dst_user_id;
		$sql = 'INSERT INTO ' . ACL_USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $dst);
		$db->sql_query($sql);
	}
}

traccer('Get Src user Group',false);

$sql = 'SELECT * FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $src_user_id;
$result = $db->sql_query($sql);
if ( empty($result) )
{
	traccer('ERROR ! Cannot get Src user Group');
}
$src_user_group = array();
while ($row = $db->sql_fetchrow($result))
{
	$src_user_group[] = $row;
}
$db->sql_freeresult($result);

traccer('Delete Dst user Group',false);

$sql = 'DELETE FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

traccer('Set Dst user Group',false);

if ( !empty($src_user_group) )
{
	foreach($src_user_group as $dst)
	{
		$dst['user_id'] = $dst_user_id;
		$sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' ' . $db->sql_build_array('INSERT', $dst);
		$db->sql_query($sql);
	}
}

traccer('Update Dst user Group ID');

$sql = 'UPDATE ' . USERS_TABLE . ' SET group_id = ' . $src_user_group_id . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

traccer('Done.',false);
?>
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Копирование прав юзеров

Сообщение Татьяна5 »

Для незнакомых с php
Запускать так:

Код: Выделить всё

http://адрес_форума.ru/название_скрипта.php?src=id_у_кого_копируем&dst=id_кому_копируем
Пример:

Код: Выделить всё

http://phpbb3012.zz/copy_perm.php?src=52&dst=53
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

Re: Копирование прав юзеров

Сообщение Пчелкин »

В самом скрипте ничего не менять?
Бекаплюсь и пробую...

Добавлено спустя 3 минуты 38 секунд:
Опять сервак лежит... да что с этим таймвебом уже... Задрали... Щас на другом попробую....
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Копирование прав юзеров

Сообщение Татьяна5 »

Пчелкин писал(а):В самом скрипте ничего не менять?
Ничего, он из адресной строки всё берёт
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11361
Стаж: 16 лет 8 месяцев
Благодарил (а): 1832 раза
Поблагодарили: 1358 раз

Re: Копирование прав юзеров

Сообщение Пчелкин »

Ага...пока не получилось... народа до фига... психанут опять... позже отпишусь...
NIKON-D90, AF-S 18-105, AF-S 14-24, AF-S 24-70
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Копирование прав юзеров

Сообщение Татьяна5 »

Немного оформила

Код: Выделить всё

<?php
/**
*
* @package phpBB3
* @version $Id: $
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
* @copyright (c) 2013 Serg c61@yandex.ru http://c61.su
* @mod: clone user permissions
* @version 0.0.1
*
*/

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

$user->session_begin();
$auth->acl($user->data);

if (!$auth->acl_get('a_'))
{
	//trigger_error($user->lang['NO_ADMIN']);
	trigger_error('You are no admin');
}

//function traccer($message, $exit = true)
//{
//	echo $message . '<br />';
//	if ($exit) exit;
//}

//traccer('Clone PHPBB user permissions START...',false);

//traccer('Get Parameters',false);

$src_user_id = request_var('src',0);
$dst_user_id = request_var('dst',0);

$form = '<form method="GET" action="copy_perm.php?src=' . $src_user_id . '&dst=' . $dst_user_id . '">
			Src (id at whom copy permissions) <input type="number" name="src" /><br /><br />
			Dst (id to whom copy permissions) <input type="number" name="dst" /><br /><br />
			<input type="submit" />
		</form>';
		
if(!$src_user_id  && !$dst_user_id)
{
	trigger_error($form);
}

if ( !$src_user_id )
{
	trigger_error('ERROR ! Src user not defined<br /><br />' . $form);
}
$traccer = 'Src user ID = '.$src_user_id;
if ( !$dst_user_id )
{
	trigger_error('ERROR ! Dst user not defined<br /><br />' . $form);
}
$traccer .= '<br />Dst user ID = '.$dst_user_id;
if ( $src_user_id == $dst_user_id )
{
	trigger_error('Src and Dst users are identical<br /><br />' . $form);
}

$traccer .= '<br />Get Src and Dst users permissions';

$sql = 'SELECT user_permissions, group_id FROM ' . USERS_TABLE . ' WHERE user_id = ' . $src_user_id . ' AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ( empty($row) )
{
	trigger_error('ERROR ! Cannot get Src user permissions or illegal user id<br /><br />' . $form);
}
$src_user_permissions = $row['user_permissions'];
$src_user_group_id = $row['group_id'];
$db->sql_freeresult($result);

$sql = 'SELECT user_permissions FROM ' . USERS_TABLE . ' WHERE user_id = ' . $dst_user_id . ' AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if ( empty($row) )
{
	trigger_error('ERROR ! Cannot get Dst user permissions or illegal user id<br /><br />' . $form);
}
$dst_user_permissions = $row['user_permissions'];
$db->sql_freeresult($result);

if ( $src_user_permissions == $dst_user_permissions )
{
	$traccer .= '<br />Src and Dst user permissions are identical, continue anyway';
}

$traccer .= '<br />Set Dst user permissions';

$sql = 'UPDATE ' . USERS_TABLE . ' SET user_permissions = "' . $src_user_permissions . '" WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

$traccer .= '<br />Get Src user ACL';

$sql = 'SELECT * FROM ' . ACL_USERS_TABLE . ' WHERE user_id = ' . $src_user_id;
$result = $db->sql_query($sql);
if ( empty($result) )
{
	trigger_error('ERROR ! Cannot get Src user ACL<br /><br />' . $form);
}
$src_user_acl = array();
while ($row = $db->sql_fetchrow($result))
{
	$src_user_acl[] = $row;
}
$db->sql_freeresult($result);

$traccer .= '<br />Delete Dst user ACL';

$sql = 'DELETE FROM ' . ACL_USERS_TABLE . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

$traccer .='<br />Set Dst user ACL';

if ( !empty($src_user_acl) )
{
	foreach($src_user_acl as $dst)
	{
		$dst['user_id'] = $dst_user_id;
		$sql = 'INSERT INTO ' . ACL_USERS_TABLE . ' ' . $db->sql_build_array('INSERT', $dst);
		$db->sql_query($sql);
	}
}

$traccer .= '<br />Get Src user Group';

$sql = 'SELECT * FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $src_user_id;
$result = $db->sql_query($sql);
if ( empty($result) )
{
	trigger_error('ERROR ! Cannot get Src user Group<br /><br />' . $form);
}
$src_user_group = array();
while ($row = $db->sql_fetchrow($result))
{
	$src_user_group[] = $row;
}
$db->sql_freeresult($result);

$traccer .= '<br />Delete Dst user Group';

$sql = 'DELETE FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

$traccer .= '<br />Set Dst user Group';

if ( !empty($src_user_group) )
{
	foreach($src_user_group as $dst)
	{
		$dst['user_id'] = $dst_user_id;
		$sql = 'INSERT INTO ' . USER_GROUP_TABLE . ' ' . $db->sql_build_array('INSERT', $dst);
		$db->sql_query($sql);
	}
}

$traccer .= '<br />Update Dst user Group ID';

$sql = 'UPDATE ' . USERS_TABLE . ' SET group_id = ' . $src_user_group_id . ' WHERE user_id = ' . $dst_user_id;
$db->sql_query($sql);

$traccer .= '<br />Done.';
trigger_error($traccer);
?>
Назвать copy_perm.php и запустить (id вводятся уже после запуска)

Вернуться в «Бета-версии модов для phpBB 3.0.x»