phpBB3Права доступа

Права доступаБезусловно, при разработке модулей серьезней HelloWorld Вам не обойтись без использования такой замечательной функциональности, как права доступа.

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

Давайте перейдем непосредственно к примерам...

Типы прав доступа

Все права доступа phpBB 3 разделяет на следующие категории:

  • Администраторские
  • Модераторские
  • Пользовательские
  • Общефорумные

На основе принадлежности к вышеприведенным группам и формируются префиксы в именах прав доступа.

Проверка прав доступа

Глобальные права

Давайте проверим, к примеру, может ли пользователь просматривать профайлы других пользователей:

if (!$auth->acl_get('u_viewprofile'))
{
     trigger_error('NOT_AUTHORISED');
}

Если таких прав у него не будет, то он увидит сообщение об ошибке и скрипт остановит свое выполнение после trigger_error ().

Локальные права

Если Вы хотите проверить локальные права, к примеру, возможность читать сообщения в форуме с ID 5, используйте следующий код:

if (!$auth->acl_get('f_read', 5))
{
     trigger_error('NOT_AUTHORISED');
}

Список всех существующих прав Вы можете найти в таблице phpbb_acl_options в Вашей базе данных.

Добавление новых прав доступа

Обратите внимание: Идентификатор права доступа не должен содержать заглавных букв, иначе Вы столкнетесь с проблемой при попытке добавить модуль, который требует это право доступа.

Пример создания права доступа используя API-интерфейс phpBB 3. Запускайте этот код в установщике Вашего модуля:

< ?php
/**
*
* Скрипт устанавливает права доступа в базу данных для модуля foo
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
 
/**
* @ignore
*/
 
// Инициализируем страницу
define('IN_PHPBB', true);
define('IN_INSTALL', 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);
$user->setup('mods/foo');
 
// Подключаем класс $auth_admin для управления правами доступа
include($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
$auth_admin = new auth_admin();
 
// Добавляем права доступа как локальные.
// Но Вы можете сделать их и как глобальные.
$auth_admin->acl_add_option(array(
    'local'        => array('f_survey_design', 'f_survey_takeforothers', 'f_survey_viewhiddenresults'),
    'global'    => array()
));
 
$message = $user->lang['ADDED_PERMISSIONS'] . '
 
';
$message .= $user->lang['REMOVE_INSTALL'];
trigger_error($message);
 
?>

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

Затем добавьте следующую строчку в файл language/ru/mods/foo.php (или language/ru/common.php):

'ADDED_PERMISSIONS'    => 'Права доступа были успешно добавлены в базу данных',

Использование SQL

Суровые челябинские программисты предпочитают вставлять права доступа напрямую в базу данных. Для этого Вам нужно выполнить запрос вроде следующего:

INSERT INTO phpbb_acl_options (auth_option, is_global, is_local, founder_only) VALUES ('u_view_foo', 1, 0, 0);
INSERT INTO phpbb_acl_options (auth_option, is_global, is_local, founder_only) VALUES ('u_manage_foo', 1, 0, 0);

После выполнения SQL-запросов Вам нужно будет очистить кеш. Это можно сделать следующими способами:

  • удалить cache/data_global.php и cache/data_global.php
  • или выполнить $cache->destroy ('acl_options');

Языковые файлы

В любом случае настоятельно рекомендуется добавлять языковые переменные для только что созданных прав доступа. Для этого просто создайте файл permissions_foo.php в language/ru/mods. Впоследствие он автоматически подключится ядром phpBB 3.

Мы только что добавили категорию «foo» (будет отображаться как новая вкладка). Все права доступа, у которых 'cat' => 'foo' будут отображаться в нашей вкладке.

Созданное право доступа уже готово к использованию. Теперь узнаем, может ли пользователь просматривать модуль foo:

if (!$auth->acl_get('u_view_foo'))
{
     trigger_error('NOT_AUTHORISED');
}

Вот мы и рассмотрели небольшие примеры для работы с правами доступа. Надеюсь, что Вы получили общее представление о том, как они работают в phpBB 3.

Материал подготовлен на основе соответствующей статьи в phpBB Development Wiki.


Есть что сказать?
Ваше имя:
Ваш e-mail:
Ваш сайт:
Ваше мнение:




земляные работы в Донецке