Убирание ролей в рантайм

По этой теме Автодобавление ролей пользователю в runtime разобрались как добавлять роли. Вопрос можно ли убрать роли?

Более конкретно у юзера будет поле с Датой. и в методе DatabaseUserRepository#loadUserByUsername предполагается проверка этой даты.
Если дата после того что ща на серваке. То у юзера должен быть readOnly на ВСЕ экраны.

То есть если по дате разрешено. То у Юзера стандартные его права. (создание обновление и тд). Но если не разрешено. До доступ к экранам и сущностям что у него заданы по правам должны быть только в readOnly. Можно это как-то сделать?

Здравствуйте

В теории, можно воспользоваться функциональностью по назначению ролей Jmix.

Т.е. в нужный вам момент времени удалить ненужную роль с пользователя через RoleAssignmentPersistence бин, затем сгенерировать новый токен аутентификации и установить новую аутентификацию с помощью SecurityContextHelper.

Сообщите, пожалуйста, если этот способ не подойдёт вам.

С уважением,
Дмитрий

Так мне получается нужно будет удалить не нужные роли (через бд? или удаление в loadUserByUsername сработает). И создать их копии с EntityPolicyAction.READ, При этом нужно их в бд сохранить?

Удаление в loadUserByUsername не сработает. Придётся удалять из бд запись RoleAssignmentModel через метод roleAssignmentPersistence.save.

Ресурсная роль для чтения в таком случае должна быть определена в бд.

Дмитрий

Так… то есть мне придется удалять роли юзера в бд, при этом сохранять где-то как в roleAssigment что такие-то роли у него были, и такая-то для чтения добавилась… Как-то сложно выглядит…

У нас в проекте все экраны наследуются от Базовых… Я наверн в базовых экранах логику пропишу…

1 симпатия

В целом, ещё механизм назначения и удаления ролей можете подсмотреть в стандартном экране назначения: io.jmix.securityflowui.view.roleassignment.RoleAssignmentView