Пользователь находится в группе "Может создавать элементы инфоблока Х". В инфоблоке Х настроена возможность добавления элементов пользователям, находящимся в упомянутой групппе.
Открываю 2 браузера, в одном логинюсь под админом, в другом - под пользователем этой самой группы. Пользователь в группе - может добавлять элементы. Из под админа удаляю из группы - теперь не может. Все работает прекрасно и на ходу - перелогиниваться не нужно.
Пробуем автоматизировать.
После добавления элемента в ИБ вызывается обработчик события (OnAfterIBlockElementAdd), в котором пользователь удаляется из группы, если он там состоял (т.е. пользователь может добавить только 1 элемент в ИБ). Пользователь из группы удаляется, это видно из под администратора. НО возможность добавления элементов не пропала! Перелогиниваюсь - пропадает.
Вопрос - как правильно сделать так, чтобы у пользователя пропадали права "на лету", сразу, как только его удалили из группы, чтобы не приходилось его выбрасывать из системы?
Я знаю, что есть CUser::SetUserGroup, обновляющая группы пользователей после СЛЕДУЮЩЕЙ авторизации (что она успешно и делает). А есть CUser::SetUserGroupArray, обновляющий группы только на время ТЕКУЩЕЙ сессии. После вызова второго метода группы успешно обновляются, только права почему-то не меняются...
Теоретически, нужно использовать оба метода - первый запомнит группы в БД и будет работать начиная со следующей авторизации, второй - только на время текущей. Но по факту работает только после повторной авторизации....
В чем может быть проблема?
Открываю 2 браузера, в одном логинюсь под админом, в другом - под пользователем этой самой группы. Пользователь в группе - может добавлять элементы. Из под админа удаляю из группы - теперь не может. Все работает прекрасно и на ходу - перелогиниваться не нужно.
Пробуем автоматизировать.
После добавления элемента в ИБ вызывается обработчик события (OnAfterIBlockElementAdd), в котором пользователь удаляется из группы, если он там состоял (т.е. пользователь может добавить только 1 элемент в ИБ). Пользователь из группы удаляется, это видно из под администратора. НО возможность добавления элементов не пропала! Перелогиниваюсь - пропадает.
Вопрос - как правильно сделать так, чтобы у пользователя пропадали права "на лету", сразу, как только его удалили из группы, чтобы не приходилось его выбрасывать из системы?
Я знаю, что есть CUser::SetUserGroup, обновляющая группы пользователей после СЛЕДУЮЩЕЙ авторизации (что она успешно и делает). А есть CUser::SetUserGroupArray, обновляющий группы только на время ТЕКУЩЕЙ сессии. После вызова второго метода группы успешно обновляются, только права почему-то не меняются...
Теоретически, нужно использовать оба метода - первый запомнит группы в БД и будет работать начиная со следующей авторизации, второй - только на время текущей. Но по факту работает только после повторной авторизации....
В чем может быть проблема?