Фиксированные права доступа

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Фиксированные права доступа

Сообщение FladeX »

Не пойму, как задать фиксированные права доступа - то бишь, вне зависимости от того, кто именно запросил страницу форума, права доступа должны учитываться по заранее определённой группе пользователей, в моём случае это поисковые боты.

Сейчас всё задаётся так:

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

// Start session management
$user->session_begin();
$auth->acl($user->data); 
Стандартное объявление, подхватываются права доступа для текущего пользователя. Я так понимаю, что мне нужно заменить параметр $user->data на другой - но на какой именно?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Фиксированные права доступа

Сообщение MIT »

Тебе надо проверить право определённой группы?
Есть шаманский код проверки прав по роли, могу скинуть в личку.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Фиксированные права доступа

Сообщение rxu »

FladeX
Есть функция function acl_get_list($user_id = false, $opts = false, $forum_id = false) в includes/auth.php.
Тестовый скрипт

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

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');

$test = $auth->acl_get_list(array(1, 2, 50), array('f_read'));
echo '<pre>';
print_r($test);
echo '</ pre>';
exit; 
выдаст многомерный массив, где первыми индексами будут id форумов, следующими - опция f_read (право чтения форумов), далее - список id пользователей, имеющих это право. Например:

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

Array
(
    [3] => Array
        (
            [f_read] => Array
                (
                    [0] => 2
                )

        )

    [1] => Array
        (
            [f_read] => Array
                (
                    [0] => 2
                    [1] => 1
                    [2] => 50
                )

        )

    [2] => Array
        (
            [f_read] => Array
                (
                    [0] => 2
                    [1] => 1
                    [2] => 50
                )

        )

) 
Здесь право чтения форума с id=3 имеет пользователь с id=2, и так далее.
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Фиксированные права доступа

Сообщение FladeX »

Нет, это не то.

Сначала мы заводим новую сессию:

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

$user->session_begin();
$auth->acl($user->data); 
Потом проверяем, есть ли доступ:

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

if ($auth->acl_get('f_list', $row['forum_id'])) 
Но это для обычной проверки, для юзера, запустившего скрипт. Мне нужно в $auth->acl($user->data); другой параметр поставить, который бы отвечал за поисковых ботов.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Фиксированные права доступа

Сообщение rxu »

Из-под любого пользователя вызываем
$auth->acl_get_list(array(50), array('f_read'));
и получаем список форумов для, например, бота с id=50.
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Фиксированные права доступа

Сообщение FladeX »

А с $auth->acl($user->data); вариантов нет?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Фиксированные права доступа

Сообщение rxu »

Варианты есть всегда.
Там используются user_permissions, user_type, user_id. По большому счету, можно выбрать всё из USERS_TABLE в массив, и скормить его acl.
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Фиксированные права доступа

Сообщение FladeX »

Вот у меня с userdata как раз сложности и возникли - не нашёл примера формирования этого массива.

Добавлено спустя 1 минуту 11 секунд:
user_id использовать тем более не вариант, так как привязка к конкретному аккаунту не нужна, это слишком неуниверсальное решение.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Фиксированные права доступа

Сообщение rxu »

FladeX писал(а):user_id использовать тем более не вариант, так как привязка к конкретному аккаунту не нужна, это слишком неуниверсальное решение.
Тогда вообще не понял вопроса. $user->data всегда привязана только к одному конкретному аккаунту.
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Фиксированные права доступа

Сообщение FladeX »

$auth->acl($user->data); - это для конкретного аккаунта, так как $user->data хранит данные текущей сессии.
$auth->acl($foo); - это пусть будет для поисковых ботов. Тогда появляется вопрос, как сформировать $foo ?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Фиксированные права доступа

Сообщение rxu »

FladeX писал(а):$auth->acl($foo); - это пусть будет для поисковых ботов.
Это не будет для поисковых ботов. Еще раз: передаются данные только одного конкретного пользователя. Не для группы, не для нескольких пользователей, а только для одного.
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Фиксированные права доступа

Сообщение FladeX »

Понял.
Как можно корректно проверить права поисковых ботов, не привязываясь к конкретному пользователю?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Фиксированные права доступа

Сообщение rxu »

Самое простое, как я уже говорил выше, проверить права любого бота, входящего в группу ботов. Они будут те же самые, что и для всех остальных.
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Фиксированные права доступа

Сообщение FladeX »

Ну да, только это опять же к конкретному id привязывается. А ведь есть роль "Доступ для бота", значит её как-то можно использовать.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Фиксированные права доступа

Сообщение MIT »

FladeX писал(а):А ведь есть роль "Доступ для бота", значит её как-то можно использовать.
Я так думаю, что моё сообщение «Есть шаманский код проверки прав по роли» никто не видел...

Ну один запрос всего:

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

SELECT (SELECT auth_setting FROM phpbb_acl_roles_data WHERE auth_option_id = (SELECT auth_option_id FROM phpbb_acl_options WHERE auth_option = "f_post") AND role_id = 19) | 0 as auth_setting

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