Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.
Расширения - это просто!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ).
-
- phpBB 1.4.1
- Сообщения: 44
- Стаж: 9 лет 2 месяца
- Благодарил (а): 7 раз
Re: Расширения - это просто!
Охо-хо... Пытаюсь как-то запретить пользователю лезть в изменение пароля. Ресет пароля запретил через глобальный конфиг.
Но теперь другая проблема. Мне надо как-то запретить изменение пароля в профиле пользователя. Насколько я понял, это изменение регулируется только правами пользователя. Есть-ли какая-то возможность где-то перехватить управление и задать жесткие права?
Ну и параллельно вопрос - можно-ли разрешить пользователю изменение своего логина без ввода пароля? В шаблоне профиля я что-то не вижу что-бы это можно было регулировать.
Но теперь другая проблема. Мне надо как-то запретить изменение пароля в профиле пользователя. Насколько я понял, это изменение регулируется только правами пользователя. Есть-ли какая-то возможность где-то перехватить управление и задать жесткие права?
Ну и параллельно вопрос - можно-ли разрешить пользователю изменение своего логина без ввода пароля? В шаблоне профиля я что-то не вижу что-бы это можно было регулировать.
-
- phpBB Guru
- Сообщения: 16375
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1746 раз
Re: Расширения - это просто!
Недопонял... права задаются в админке, запретите изменение пароля, и всё. Жестче некуда.UncleAndy писал(а):это изменение регулируется только правами пользователя. Есть-ли какая-то возможность где-то перехватить управление и задать жесткие права?
Нет, и без правки ядра это сделать не получится.UncleAndy писал(а):можно-ли разрешить пользователю изменение своего логина без ввода пароля
К сожалению, пока не нашел способа передать туда указатель на текущий экземпляр объекта слушателя, т.к. это строка. Похоже, надо вносить изменения в2PiK писал(а):в/includes/message_parser.php
есть событие modify_bbcode_init для добавления/модификации бб-кодов, нужно добавить бб-код, но в качестве замены используется не код, а функция из расширения, так естественно не работает:Код: Выделить всё
'mybbcode' => array('bbcode_id' => id, 'regexp' => array('#\[mybbcode\](.*?)\[/mybbcode\]#uise' => "\$this->bbcode_mybbcode('\$1')")),
как использовать функцию из расширения?Код: Выделить всё
Fatal error: Call to undefined method parse_message::bbcode_mybbcode()
function parse_bbcode()
путем добавления $phpbb_container
в global
, тогда в расширении будет возможен вызов типа
Код: Выделить всё
$bbcodes = array_merge($bbcodes, array('mybbcode' => array('bbcode_id' => id, 'regexp' => array('#\[mybbcode\](.*?)\[/mybbcode\]#uise' => "\$phpbb_container->get('sheer.callsign.listener')->bbcode_mybbcode('\$1')"))));
2PiK
https://tracker.phpbb.com/browse/PHPBB3-13648
Re: Расширения - это просто!
Спасибо (за запрос на github особенно), остаётся ещё одна проблема, в ту функцию теперь нужно передать bbcode_uid
Код: Выделить всё
Undefined property: author/extname/event/listener::$bbcode_uid
Последний раз редактировалось 2PiK 23.02.2015 17:47, всего редактировалось 1 раз.
-
- phpBB Guru
- Сообщения: 16375
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1746 раз
Re: Расширения - это просто!
uid же привязан уже к конкретному посту? Тогда через экземпляр самого класса parse_message()?
-
- phpBB 1.4.1
- Сообщения: 44
- Стаж: 9 лет 2 месяца
- Благодарил (а): 7 раз
Re: Расширения - это просто!
В глобальном конфиге есть только allow_password_reset. Но это немного другое, как я понял. Судя по исходному коду за изменение пароля отвечают именно права конкретного пользователя. Поэтому глобально это не запретишь, насколько я понял. Или я понял неправильно?rxu писал(а):Недопонял... права задаются в админке, запретите изменение пароля, и всё. Жестче некуда.UncleAndy писал(а):это изменение регулируется только правами пользователя. Есть-ли какая-то возможность где-то перехватить управление и задать жесткие права?
Жаль. Я надеялся что не придется лезть в код ядра.rxu писал(а):Нет, и без правки ядра это сделать не получится.UncleAndy писал(а):можно-ли разрешить пользователю изменение своего логина без ввода пароля
В принципе, я мог-бы использовать и другую модель авторизации - что-бы была и возможность авторизации с паролем, и через QR-код. Но тут возникает вопрос - как передать в функцию login() auth-провайдера дополнительные данные из формы? Насколько я понимаю, в инициализаторе можно сохранить переменную класса \phpbb\request\request. Из нее возможно извлечь параметры запроса?
-
- phpBB Guru
- Сообщения: 16375
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1746 раз
Re: Расширения - это просто!
UncleAndy писал(а):Поэтому глобально это не запретишь, насколько я понял. Или я понял неправильно?
allow_password_reset
- это глобальная настройка опции восстановления пароля. Локально изменение пароля можно запретить отдельным пользователям или группам, есть право u_chgpasswd
- Может менять пароль
.
UncleAndy писал(а):ак передать в функцию login() auth-провайдера дополнительные данные из формы?
Практически так, для примера можете посмотретьUncleAndy писал(а):в инициализаторе можно сохранить переменную класса \phpbb\request\request
\phpbb\auth\provider\apache.php
. Сервис @request
просто передается в конструктор стандартным способом, и через экземпляр этого класса можно получить любые переменные из формы.-
- phpBB 1.4.1
- Сообщения: 44
- Стаж: 9 лет 2 месяца
- Благодарил (а): 7 раз
Re: Расширения - это просто!
Т.е. сделать такой запрет перманентным через расширение не получится?rxu писал(а):Локально изменение пароля можно запретить отдельным пользователям или группам, есть право u_chgpasswd - Может менять пароль.
Re: Расширения - это просто!
т.е.?, не понял вопроса, для примера, вrxu писал(а):uid же привязан уже к конкретному посту?
message_parser.php
Код: Выделить всё
'quote' => array('bbcode_id' => 0, 'regexp' => array('#\[quote(?:="(.*?)")?\](.+)\[/quote\]#uise' => "\$this->bbcode_quote('\$0')")),
bbcode_quote()
используется $this->bbcode_uid
, вот он нужен и в функции.-
- phpBB 1.4.1
- Сообщения: 44
- Стаж: 9 лет 2 месяца
- Благодарил (а): 7 раз
Re: Расширения - это просто!
Так... Тогда еще вот такой вопрос... А в auth-провайдере возможно использовать код из другого (заранее известного) auth-провайдера? Что-бы мне, например, совместить авторизацию Db и свой метод, но не дублировать код.
-
- phpBB Guru
- Сообщения: 16375
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1746 раз
Re: Расширения - это просто!
Можно взять через событие2PiK писал(а):в bbcode_quote() используется $this->bbcode_uid, вот он нужен и в функции.
core.message_parser_check_message
.Добавлено спустя 24 минуты 13 секунд:
Можно в миграции при установке расширения задать право доступа, а при удалении расширения возвращать его на место.UncleAndy писал(а):Т.е. сделать такой запрет перманентным через расширение не получится?
Плохо себе это представляю, но в теории можно воткнуть в свой провайдер сервис другого провайдера (например,UncleAndy писал(а): совместить авторизацию Db и свой метод, но не дублировать код.
@auth.provider.db
), и использовать его методы вместе со своими.-
- phpBB 1.4.1
- Сообщения: 44
- Стаж: 9 лет 2 месяца
- Благодарил (а): 7 раз
Re: Расширения - это просто!
По идее, можно-же использовать наследование? Своего провайдера сделать наследником от Db.rxu писал(а):но в теории можно воткнуть в свой провайдер сервис другого провайдера (например, @auth.provider.db), и использовать его методы вместе со своими.
-
- phpBB Guru
- Сообщения: 16375
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1746 раз
Re: Расширения - это просто!
Думаю, не проблема.UncleAndy писал(а):По идее, можно-же использовать наследование
Добавлено спустя 1 час 8 минут 15 секунд:
2PiK
Реализовал немного по-другому https://github.com/phpbb/phpbb/pull/3435
Re: Расширения - это просто!
точно, я всё "в лоб" пытаюсь решить.rxu писал(а):Можно взять через событие core.message_parser_check_message.
там ещё один момент,rxu писал(а):Реализовал немного по-другому
/includes/bbcode.php
, событие bbcode_cache_init_end
, аналогично, можно использовать и код и функцию:
Код: Выделить всё
'#(\[\/?(list|\*):[mou]?:?$uid\])[\n]{1}#' => "\$1",
Код: Выделить всё
'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#ise' => "\$this->bbcode_second_pass_quote('\$1', '\$2')"
$phpbb_container
решать, то нужно добавить его в bbcode_second_pass
, возможно как-то по другому сделают (поднимите если не сложно вопрос на github'e)-
- phpBB Guru
- Сообщения: 16375
- Стаж: 17 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 521 раз
- Поблагодарили: 1746 раз
Re: Расширения - это просто!
Согласен. Позже отправлю PR.2PiK писал(а):там ещё один момент, /includes/bbcode.php, событие bbcode_cache_init_end, аналогично, можно использовать и код и функцию:
Так же, как и в предыдущем случае, через отдельный метод, аналогичный validate_bbcode_by_extension() https://github.com/phpbb/phpbb/pull/3435 (см. комментарии на предмет использования).2PiK писал(а): если через $phpbb_container решать, то нужно добавить его в bbcode_second_pass, возможно как-то по другому сделают
-
- phpBB 1.4.1
- Сообщения: 44
- Стаж: 9 лет 2 месяца
- Благодарил (а): 7 раз
Re: Расширения - это просто!
Хочу поблагодарить всех за помощь. К сожалению, текущих возможностей PHPBB по расширению не хватает для моих целей. А лезть в исходники ядра не хочется. Тем не менее, текущие наработки на PHP пригодятся в дальнейшем. Если кому-то интересно, вот тут текущее состояние исходников расширения. В текущем состоянии работает авторегистрация и автологин по QR-коду. Но дальше доделать уже не получается - не вижу штатных возможностей для этого. Если кто-то заинтересуется продолжением работы над расширением или форком, буду рад помочь.