|
Поделиться

Добавление нового права доступа в phpBB

Хаки, скрипты, BB-коды и другие вещи, не оформленные в виде полноценных модов, но способствующие улучшению функциональности движка.

Сообщение Shredder » 30.01.15 13:23

Задачу добавления дополнительного права доступа решим на примере разрешения определённым пользователям редактировать свои сообщения независимо от ограничения по времени, установленного в администраторском разделе.

В первую очередь, добавляем новое поле в БД. Для этого через phpmyadmin или STK нужно выполнить SQL-запрос:
Код: Выделить всё
INSERT INTO `phpbb_acl_options` (`auth_option_id`, `auth_option`, `is_global`, `is_local`, `founder_only`) VALUES (NULL, 'u_time_edit', '1', '0', '0');

Вместо u_time_edit вы можете дать праву своё собственное имя. Единица после имени указывает, что право будет глобальное и не может быть использовано на уровне отдельных форумов. Если вам нужно форумное (локальное) право, то вместо единицы поставьте 0, а на месте следующего по порядку нуля выставьте единицу, и также у вас поменяется префикс в имени права. Пример:
Код: Выделить всё
INSERT INTO `phpbb_acl_options` (`auth_option_id`, `auth_option`, `is_global`, `is_local`, `founder_only`) VALUES (NULL, 'f_time_edit', '0', '1', '0');

Префикс f_ в имени означает форумное (локальное) право, u_ - глобальное пользовательское право, a_ - глобальное администраторское, m_ - глобальное модераторское.

После выполнения запроса следует очистить кеш конференции на главной странице админ-раздела.
Далее добавляем языковое описание для u_time_edit (или для того имени, которое будет нужно вам):

language/ru/acp/permissions_phpbb.php
Найти:
Код: Выделить всё
	'acl_u_pm_flash'	=> array('lang' => 'Может использовать тег [flash] в ЛС', 'cat' => 'pm'),

Добавить после:
Код: Выделить всё
	'acl_u_time_edit'	=> array('lang' => 'Может игнорировать ограничение времени на редактирование', 'cat' => 'post'),

Если не добавить языковое описание, то в администраторском разделе новая опция не появится. Также обратите внимание на часть строки 'cat' => 'post' - это означает, что в системе управления правами доступа вашу опцию можно будет изменить на вкладке "Размещение сообщений". Если её нужно поместить на вкладку "Разное", то следует использовать 'cat' => 'misc'. Чтобы узнать имена остальных категорий, откройте файл движка language/ru/acp/permissions_phpbb.php и посмотрите в нём следующий массив:

Код: Выделить всё
// Define categories and permission types
$lang = array_merge($lang, array(
	'permission_cat'	=> array(
		'actions'		=> 'Действия',
		'content'		=> 'Содержимое',
		'forums'		=> 'Форумы',
		'misc'			=> 'Разное',
		'permissions'	=> 'Права доступа',
		'pm'			=> 'Личные сообщения',
		'polls'			=> 'Опросы',
		'post'			=> 'Размещение сообщений',
		'post_actions'	=> 'Действия с сообщениями',
		'posting'		=> 'Сообщения',
		'profile'		=> 'Профиль',
		'settings'		=> 'Установки',
		'topic_actions'	=> 'Действия с темами',
		'user_group'	=> 'Пользователи',
	),


Вот и всё, новое право готово! Осталось пустить его в действие. Наличие или отсутствие у пользователя добавленного вами права проверяется так:
$auth->acl_get('имя_вашей_опции')
Перед использованием убедитесь, что в скрипте определена глобальная переменная $auth. Для этого нужно, чтобы в самом начале изменяемой вами функции phpBB присутствовало global $auth - если этого нет, то добавьте. Для локального права нужно ещё определить (если не определён) и указать ID форума, например: $auth->acl_get('f_list', $row['forum_id'])
Можно проверять и сразу несколько прав при помощи функции acl_gets, например:
$auth->acl_gets('f_edit', 'm_edit', $forum_id) - эта конструкция проверяет наличие одного ИЛИ другого права.

Какие файлы и коды изменять дальше - целиком и полностью зависит от стоящей перед вами задачи. В данном случае решается вопрос по редактированию сообщений независимо от временного ограничения, и инструкции для него будут такие:

posting.php
Найти:
Код: Выделить всё
	if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']))

Заменить на:
Код: Выделить всё
	if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'] || $auth->acl_get('u_time_edit')))

viewtopic.php
Найти:
Код: Выделить всё
		($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])

Заменить на:
Код: Выделить всё
		($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'] || $auth->acl_get('u_time_edit'))

После этого зайти в админку в "Управление группами", создать группу "Проверенные" и назначить ей глобальное пользовательское право "Может игнорировать ограничение времени на редактирование". В группу можно добавлять пользователей, на которых не будет влиять ограничение времени на редактирование.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение XeMyJI » 19.02.15 06:38

Очень полезная тема, спасибо большое. но у меня не работает. в viewtopic.php следующая фраза:
'TOPIC_INVENTN' => ($auth->acl_get['f_topic_inventn_read']) ? censor_text($topic_data['topic_inventn']) : '',
так вот у группы администраторов есть право доступа видеть данное поле, а у группы гостей того права нет.и тем не менее данное поле не видит ни группа администраторов,ни группа гостей,то есть все,почему-то,проходят по второму условию.
XeMyJI
 
Сообщения: 9
Зарегистрирован: 28.01.15 07:26

Сообщение Shredder » 19.02.15 09:30

Во-первых, при проверке права у вас квадратные скобки вместо круглых. Должны быть круглые, как в моих примерах.
И дополнил немного статью. В частности, для форумного права нужно ещё определить (если не определён) и указать ID форума. Например: $auth->acl_get('f_list', $forum_id). И после добавления нового права следует очистить кеш форума.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение XeMyJI » 24.02.15 04:59

спасибо,всё работает)
XeMyJI
 
Сообщения: 9
Зарегистрирован: 28.01.15 07:26


Вернуться в Расширение возможностей phpBB 3.0.x

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron