Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Делаем Супер-Администратора на форуме

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Делаем Супер-Администратора на форуме

Сообщение Shredder »

constants.php
Найти:

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

// Table names
Добавить перед:

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

// Super Admin
define('SUPER_ADMIN', ID_нужного_пользователя);
На место ID_нужного_пользователя подставляете ваш собственный или любой другой желаемый ID, кому хотите дать права Super Admin.

session.php
Найти:

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

			// Did the session exist in the DB?
			if (isset($this->data['user_id']))
			{
Добавить перед:

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

			if ($this->data['user_id'] == SUPER_ADMIN)
			{
				$this->data['user_type'] = USER_FOUNDER;
			}
Чтобы кроме самого Супер-Админа никто не смог управлять его аккаунтом:
acp/acp_users.php
Найти:

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

		// Prevent normal users/admins change/view founders if they are not a founder by themselves
		if ($user->data['user_type'] != USER_FOUNDER && $user_row['user_type'] == USER_FOUNDER)
		{
			trigger_error($user->lang['NOT_MANAGE_FOUNDER'] . adm_back_link($this->u_action), E_USER_WARNING);
		}
Добавить после:

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

		// Prevent normal users/admins/founders change/view Super Admin
		if ($user->data['user_id'] != SUPER_ADMIN && $user_row['user_id'] == SUPER_ADMIN)
		{
			trigger_error('You tried to manage a user with Super Admin status.' . adm_back_link($this->u_action), E_USER_WARNING);
		}
После этого вы всегда будете иметь права Основателя (даже если в админке у вас нет этого статуса), но при этом никто, включая других основателей, не сможет снять с вас права, забанить и т.п.

Аналогичным образом константу SUPER_ADMIN можно использовать и в любых других частях phpBB, где хотите отменить какие-либо ограничения или дать определённые функции только для него. Например, у себя я установил, чтобы никто кроме меня не мог очищать логи.
Алсидес
phpBB 1.4.4
Сообщения: 143
Стаж: 11 лет 5 месяцев
Благодарил (а): 57 раз
Поблагодарили: 9 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Алсидес »

Shredder
Это просто супер, спасибо большое!))
php и HTML - учусь, а CSS и JavaScript пока 0%
Аватара пользователя
Sherlock
phpBB 2.0.2
Сообщения: 301
Стаж: 11 лет 6 месяцев
Откуда: Украина, Ивано-Франковск
Благодарил (а): 40 раз
Поблагодарили: 44 раза

Re: Делаем Супер-Администратора на форуме

Сообщение Sherlock »

Shredder, Спасибо, хорошая штука. У меня вопрос.
А как сделать так чтобы этого супер администратора никто не мог удалить и группы "Администраторы" ?
SH
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Shredder »

Sherlock писал(а):никто не мог удалить и группы "Администраторы"
Никто, кроме него самого, полагаю? Попробуйте:

includes/functions_user.php

Найти:

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

	$sql = 'SELECT *
		FROM ' . GROUPS_TABLE . '
		WHERE ' . $db->sql_in_set('group_name', $group_order);
	$result = $db->sql_query($sql);
Добавить перед:

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

	global $user;
	if (in_array(SUPER_ADMIN, $user_id_ary) && $group_name === $user->lang['G_ADMINISTRATORS'] && $user->data['user_id'] != SUPER_ADMIN)
	{
		return 'NO_AUTH_OPERATION';
	}
Добавлено спустя 7 минут 14 секунд:
У себя ещё надумал сделать, чтобы супер-администратор имел все глобальные права (пользовательские, модераторские и администраторские), не зависящие ни от каких настроек, подобно тому как основатель имеет все администраторские права. В includes/auth.php найти:

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

		// If this user is founder we're going to force fill the admin options ...
		if ($userdata['user_type'] == USER_FOUNDER)
		{
			foreach ($this->acl_options['global'] as $opt => $id)
			{
				if (strpos($opt, 'a_') === 0)
				{
					$hold_ary[0][$this->acl_options['id'][$opt]] = ACL_YES;
				}
			}
		}
Добавить после:

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

		// If this user is Super Admin we're going to force fill all global options ...
		if ($userdata['user_id'] == SUPER_ADMIN)
		{
			foreach ($this->acl_options['global'] as $opt => $id)
			{
				$hold_ary[0][$this->acl_options['id'][$opt]] = ACL_YES;
			}
		}
При этом супер-администратор может не входить ни в какие группы и не отображаться на страницах команды и групп.

Хотел ещё с локальными правами то же самое сделать, но пока не было времени тестировать.

Добавлено спустя 5 минут 50 секунд:
После последней правки нужно очистить кеш.
Последний раз редактировалось Shredder 02.07.2013 1:15, всего редактировалось 2 раза.
Аватара пользователя
Sherlock
phpBB 2.0.2
Сообщения: 301
Стаж: 11 лет 6 месяцев
Откуда: Украина, Ивано-Франковск
Благодарил (а): 40 раз
Поблагодарили: 44 раза

Re: Делаем Супер-Администратора на форуме

Сообщение Sherlock »

Получилось так: Удалить то смог, а обратно добавить, прав таких нет.
Shredder писал(а):Хотел ещё с локальными правами то же самое сделать, но пока не дошли руки.
Локальные права не помешают. Ибо если супер админ удален он доступ имеет к админ панели, а к форумам, нет. Пишет: У вас нет доступа к форумам
SH
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Shredder »

Sherlock писал(а):Получилось так: Удалить то смог, а обратно добавить, прав таких нет.
Если имеется в виду, что нет возможности добавить через управлением профилем, то можно сделать это через "Управление группами".
Sherlock писал(а):если супер админ удален
Откуда удалён? Из групп?
Аватара пользователя
Sherlock
phpBB 2.0.2
Сообщения: 301
Стаж: 11 лет 6 месяцев
Откуда: Украина, Ивано-Франковск
Благодарил (а): 40 раз
Поблагодарили: 44 раза

Re: Делаем Супер-Администратора на форуме

Сообщение Sherlock »

Shredder писал(а):Откуда удалён? Из групп?
Да.
Не могу добавить через
Shredder писал(а):"Управление группами".
А удалить через
Shredder писал(а):"Управление группами".
может(
SH
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Shredder »

Sherlock
Так, понятно. Оказывается, что в functions_user.php - не одно вхождение, которое я задал для поиска, поэтому добавили не в то место. Изменил инструкцию. Старую добавку тогда удалите.
Аватара пользователя
Sherlock
phpBB 2.0.2
Сообщения: 301
Стаж: 11 лет 6 месяцев
Откуда: Украина, Ивано-Франковск
Благодарил (а): 40 раз
Поблагодарили: 44 раза

Re: Делаем Супер-Администратора на форуме

Сообщение Sherlock »

Shredder, Большое спасибо.
SH
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Shredder »

Оказывается, если снять с супер-админа (СА) Основателя, то можно было его забанить. Хотя не представляю, зачем кому-то снимать Основателя с.супер-админа, ведь если поставить ему статус Основателя, то никто кроме него же самого снять это не сможет, т.к. к управлению его профилем доступа не имеет. Но если всё же кому-то нужно, то:

includes/session.php

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

		// Is user banned? Are they excluded? Won't return on ban, exists within method
Добавить перед:

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

		if ($this->data['user_id'] == SUPER_ADMIN)
		{
			$this->data['user_type'] = USER_FOUNDER;
		}
В этом случае на СА не будет действовать бан, как и на обычного Основателя, даже если СА не имеет этого статуса и был кем-то забанен.

Кто-то из не знающих код phpBB может спросить: а зачем давать возможность банить СА, почему не сделать его везде таким же "неприкасаемым", как и Основателя? Ответ таков: статус Основателя берётся из базы данных и проверки на этот статус жёстко (на уровне кода) рассованы в огромное множество файлов phpBB. Идея же СА была такова, чтобы сделать всё на уровне кода, не прибегая к БД, и при этом ограничиться минимальными правками кода.
Алсидес
phpBB 1.4.4
Сообщения: 143
Стаж: 11 лет 5 месяцев
Благодарил (а): 57 раз
Поблагодарили: 9 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Алсидес »

Shredder писал(а):Например, у себя я установил, чтобы никто кроме меня не мог очищать логи.
Я тоже хотел так делать.
Поставил это:

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

 if ($user->data['user_id'] == SUPER_ADMIN)
После этого:

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

		$deleteall	= (!empty($_POST['delall'])) ? true : false;
На денвере вышло, но на реальном хостинге нет. Почему так бывает не понимаю..
php и HTML - учусь, а CSS и JavaScript пока 0%
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Shredder »

Алсидес
Вот мой файл -
acp_logs.zip
(2.17 КБ) 355 скачиваний
Там ищи SUPER_ADMIN и делай, как в этом файле.
Алсидес
phpBB 1.4.4
Сообщения: 143
Стаж: 11 лет 5 месяцев
Благодарил (а): 57 раз
Поблагодарили: 9 раз
Контактная информация:

Re: Делаем Супер-Администратора на форуме

Сообщение Алсидес »

Shredder
Спасибо, значит опять не туда поставил..
php и HTML - учусь, а CSS и JavaScript пока 0%
Закрыто

Вернуться в «Для авторов (phpBB 3.0.x)»