Страница 3 из 4

Re: Добавление пользователя через HTTP

Добавлено: 18.12.2018 22:35
zabe1
Если использовать ваш пример то какие инклуды надо подключить что бы он работал?

Отправлено спустя 1 минуту 28 секунд:
Sheer писал(а): 18.12.2018 22:35 Тогда составляйте SQL-запросы и вперед. Только не запутайтесь в таблицах
С помощью запросов выдал права и все добавилось но сразу же появилась проблема. Везде указано что права есть но по факту у пользователя их нет. Именно из за этого я и написал сюда

Re: Добавление пользователя через HTTP

Добавлено: 18.12.2018 22:38
Sheer
zabe1 писал(а): 18.12.2018 22:37 то какие инклуды надо подключить
rxu писал(а): 18.12.2018 21:43 includes\acp\acp_permissions.php

Re: Добавление пользователя через HTTP

Добавлено: 18.12.2018 22:39
zabe1
В таблицах полностью разобрался. Выдал все нужные роли пользователю. Через адм проверил его права и там все в норме но вот если зайти на аккаунт пользователя то прав нету. Из за этого решил на прямую HTTP запросом выдать права. Возможно как то решить проблему добавления через SQL запросы?

Re: Добавление пользователя через HTTP

Добавлено: 18.12.2018 22:39
Sheer
zabe1 писал(а): 18.12.2018 22:37 но сразу же появилась проблема
Я же сказал, в таблицах не запутайтесь. https://www.phpbbguru.net/database/tables/

Отправлено спустя 32 секунды:
zabe1 писал(а): 18.12.2018 22:39 В таблицах полностью разобрался
Значит не полностью.

Отправлено спустя 2 минуты 39 секунд:
zabe1 писал(а): 18.12.2018 22:39 но вот если зайти на аккаунт пользователя то прав нету
Что это значит? Вы авторизовываетесь как этот пользователь, или проверяете права из его профиля?

Re: Добавление пользователя через HTTP

Добавлено: 18.12.2018 22:43
zabe1
Sheer писал(а): 18.12.2018 22:39 Я же сказал, в таблицах не запутайтесь
Попробую по другому обьяснить. В таблицах полностью разобрался. Выдаю права пользователю. Везде права выдались. Если пробить по маскам либо посмотреть на форуме все выдалось. На форуме пишет что человек модератор и т.д. Через адм проверяю сами права и там все работает но если зайти на аккаунт пользователя то прав нету. В wiki читал что это связано с тем что выдача прав кэшируется и надо чистить кэш. Если у кого то есть информация по поводу того как это правильно сделать либо как это обойти другим способом буду благодарен

Отправлено спустя 3 минуты 6 секунд:
Что это значит? Вы авторизовываетесь как этот пользователь, или проверяете права из его профиля?
Авторизовался как этот пользователь и там прав нету. А если проверить права из его профиля то все в норме

Re: Добавление пользователя через HTTP

Добавлено: 18.12.2018 22:46
Sheer
zabe1 писал(а): 18.12.2018 22:43 но если зайти на аккаунт пользователя
Выражайтесь точнее. Что значит "зайти на аккаунт"? Вы авторизовываетесь как этот пользователь или переносите на себя его права, будучи администратором?

Re: Добавление пользователя через HTTP

Добавлено: 18.12.2018 22:47
zabe1
Sheer писал(а): 18.12.2018 22:46 Выражайтесь точнее. Что значит "зайти на аккаунт"? Вы авторизовываетесь как этот пользователь или переносите на себя его права, будучи администратором?
Авторизовался как этот пользователь

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 13:13
zabe1
Sheer писал(а): 18.12.2018 21:59 $auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_settings, $assigned_role);
Тест показал что такой способ работает но мне надо выдать пользователю две роли одна форумная вторая модераторская но при выдачи этим способом старая роль удаляется а новая записывается. Это можно как то исправить?

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 16:10
Sheer
В приведенном примере вообще никакой роли не назначается, ибо $assigned_role = 0;. И не должно - это стандартное поведение и требование. Если набор выдаваемых прав отличается от набора прав, которые назначены ролью, то роль становится неназначенной, и запись из таблицы phpbb_acl_users удаляется, вместо нее заносятся записи о каждом выданном праве доступа, отличном от Нет
zabe1 писал(а): 19.12.2018 13:13 мне надо выдать пользователю две роли
Ну и выдавайте. Только параметры нужно правильно указать. Например, если $assigned_role = 5, что соответствует роли ROLE_USER_FULL, то и набор прав (массив $auth_settings) должен соответствовать этой роли или быть пустым, чтобы в таблице phpbb_acl_users не было каши. В этом случае для пользователя с ID=2 поля таблицы должны иметь значения forum_id = 0; auth_option_id = 0; auth_role_id = 5; auth_setting = 0;
zabe1 писал(а): 19.12.2018 13:13 одна форумная вторая модераторская
То есть локальные права и глобальные. Если локальные, нужно заполнить массив $forum_id, например

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

$forum_id = array(4,6,9,12);
или

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

$forum_id = array(7);

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 16:17
zabe1
Sheer писал(а): 19.12.2018 16:10 Ну и выдавайте. Только параметры нужно правильно указать. Например, если $assigned_role = 5, что соответствует роли ROLE_USER_FULL, то и набор прав (массив $auth_settings) должен соответствовать этой роли или быть пустым, чтобы в таблице phpbb_acl_users не было каши
Вот такой вызов функции $auth_admin->acl_set('user', 5, 6422, array(), 25); выдает пользователю 6422 полный доступ который указан в роли 25 на форум ID 5. Все выдается без проблем но после этого я выдаю вторую роль $auth_admin->acl_set('user', 5, 6422, array(), 14); и она тоже выдается но старая удаляется.

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 17:28
Sheer
Форумная роль одинакового типа (например модераторская) может быть выдана только одна.

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 17:34
zabe1
Sheer писал(а): 19.12.2018 17:28 Форумная роль одинакового типа (например модераторская) может быть выдана только одна.
Так я и спрашиваю как выдать одному пользователю две роли на один и тот же форум? Все что мне нужно так это пример кода в котором выдается пользователю форумная роль и модераторская роль на определенный форум. Так же хотелось бы понять как их удалять.

Отправлено спустя 5 минут 40 секунд:
У меня есть ид пользователя ид форума к которому надо дать права и ид ролей которые нужно дать пользователю. Задача системно выдать пользователю модераторскую роль на данный форум и форумную роль после чего так же системно снять эти роли с пользователя. Все что мне надо это пример кода а дальше я уже разберусь.

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 17:50
Sheer
zabe1 писал(а): 19.12.2018 17:40 Так я и спрашиваю как выдать одному пользователю две роли на один и тот же форум?
Роли должны быть разного типа. См. таблицу phpbb_acl_rolesНельзя выдать две роли, тип которых role_type, например m_ одинаков.

Отправлено спустя 2 минуты 46 секунд:
zabe1 писал(а): 19.12.2018 17:40 Так же хотелось бы понять как их удалять.
В вашем случае только SQL-запросом, например

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

DELETE FROM phpbb_acl_users WHERE user_id=50 AND auth_role_id=1

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 17:54
zabe1
Sheer писал(а): 19.12.2018 17:50 Роли должны быть разного типа. См. таблицу phpbb_acl_rolesНельзя выдать две роли, тип которых role_type, например m_ одинаков.
Я это понимаю но как мне это системно сделать? $auth_admin->acl_set Куда мне там вписать role_type вот что я не понимаю.

Отправлено спустя 1 минуту 25 секунд:
Можете две строчки написать примера того как выдается одна роль системно и как другая? А я там уже все сам додумаю

Отправлено спустя 54 секунды:
Или может нужна другая функция? Вот в чем я не разбираюсь. Мне просто нужен пример кода

Отправлено спустя 11 минут 20 секунд:
Sheer писал(а): 19.12.2018 17:52 В вашем случае только SQL-запросом, например
В ходе тестирования было выявлено что если удалить права на прямую из таблицы то они все равно остаются

Re: Добавление пользователя через HTTP

Добавлено: 19.12.2018 18:10
Sheer
zabe1 писал(а): 19.12.2018 17:56 как мне это системно сделать?
Правильно указать параметры и правильно создать роль.
Например

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

		$auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_settings, 13);
		$auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_settings, 14);
где ID пользователя 50, ID форума 3 сработает, ибо две разные роли разных типов.
13 ROLE_MOD_QUEUE
14 ROLE_FORUM_FULL

Это

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

		$auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_settings, 11);
		$auth_admin->acl_set($ug_type, $forum_id, $ug_id, $auth_settings, 12);
добавит только одну роль 12 - ROLE_MOD_SIMPLE
zabe1 писал(а): 19.12.2018 17:56 Куда мне там вписать role_type
никуда.