Уважаемые пользователи!
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. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

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

Имитация прав доступа

Сообщение Shredder »

Кто бы ни открыл страничку скрипта, нужно сделать так, будто её открывает гость (открывать с правами гостя), но без потери авторизации и других багов. Как это сделать?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Имитация прав доступа

Сообщение Sheer »

По идее, чтобы глубоко не рыть, просто заменить у объекта $auth эти праметры

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

    [acl] => Array
        (
            [0] => 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000
            [1] => 10000010000001000011001000100000000000000000000000000000000000
            [2] => 11111111111111111111111111111111111111111110000000000000000000
            [3] => 11111111111111111111111111111111111111111110000000000000000000
            [4] => 11111111111111111111111111111111111111111110000000000000000000
            [5] => 10000010000001000011001000100000000000000000000000000000000000
            [6] => 10000010000001000011001000100000000000000000000000000000000000
        )
на гостевые.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Shredder
Former team member
Сообщения: 2224
Стаж: 15 лет 4 месяца
Благодарил (а): 124 раза
Поблагодарили: 138 раз

Re: Имитация прав доступа

Сообщение Shredder »

Sheer
Не знаю, не знаю, если тупо заменить, то валидацию точно не пройдёт, скажут "тупо заменил".
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Имитация прав доступа

Сообщение Sheer »

Shredder писал(а): валидацию точно не пройдёт
Ну и забей. Или используй функцию
function ghost_permissions($from_user_id, $to_user_id)
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Shredder
Former team member
Сообщения: 2224
Стаж: 15 лет 4 месяца
Благодарил (а): 124 раза
Поблагодарили: 138 раз

Re: Имитация прав доступа

Сообщение Shredder »

Решение следующее:

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

        // Делаем резервную копию своих исходных прав
        $backup = array(
            'user_data'    => $this->user->data,
            'auth'        => $this->auth
        );

        // Вытаскиваем права гостя на время
        $sql = 'SELECT * FROM ' . USERS_TABLE . '
                WHERE user_id = ' . ANONYMOUS;
        $result = $this->db->sql_query($sql);

        while ($row = $this->db->sql_fetchrow($result))
        {
            $this->user->data = $row;
            $this->auth->acl($this->user->data);
        }
        $this->db->sql_freeresult($result);


========= ИСПОЛНЯЕМ ТУТ ЛЮБОЙ КОД, КОТОРЫЙ ТРЕБУЕТ ГОСТЕВЫЕ ПРАВА =========


        // Возвращаем исходные права обратно
        $this->auth = $backup['auth'];
        $this->user->data = $backup['user_data'];

        unset($backup); 

Вернуться в «Для разработчиков»