Использование Spring Security ACL - как назначить разрешение READ для объекта всем пользователям (зарегистрированным и анонимным)?
Каков наилучший способ дать всем пользователям (зарегистрированным и анонимным) разрешение на чтение объекта? Я работаю над системой, в которой пользователи могут создавать элементы, которые могут просматривать все, но редактировать могут только пользователи-создатели или администраторы.
Одним из решений, которое приходит на ум, является то, что Spring дает роль не прошедших проверку подлинности пользователей ROLE_ANONYMOUS, я могу изменить ее на ROLE_USER, а также дать и также передать ее всем моим проверенным пользователям, таким образом, каждый - ROLE_USER. Тогда все общедоступные объекты получат разрешение READ для ROLE_USER, и оттуда я могу использовать группы (GrantedAuthoritySid), чтобы определить, есть ли у вас доступ или нет (у всех будет доступ).
Мне интересно, есть ли лучший способ достичь этого, не давая разрешение READ на ROLE_USER для каждого открытого объекта?
1 ответ
Если рассматриваемые объекты могут быть просмотрены кем-либо, вам не нужно применять ACL к ним. Применяйте ACL только к операциям, которые изменяют такие объекты.
Если видимость (публичная / приватная) настраивается для каждого объекта, вы можете использовать выделенный флаг для него и управлять видимостью этим флагом (например, с помощью управления доступом на основе выражений).
Однако, если вы хотите придерживаться ACL и для таких объектов, вы можете создать выделенную роль (например, ROLE_READER) и динамически назначать роль как анонимным, так и аутентифицированным пользователям при аутентификации.
Посмотреть класс org.springframework.security.core.authority.mapping.SimpleAuthorityMapper
это можно настроить с правами доступа по умолчанию (ROLE_READER в вашем случае), которые будут назначены всем пользователям. Затем используйте маппер во время процесса аутентификации. Поскольку вы не указали способ аутентификации ваших пользователей, я полагаю, что имя пользователя / пароль и схема по умолчанию org.springframework.security.authentication.dao.DaoAuthenticationProvider
, если вы внимательно посмотрите на этот класс, вы обнаружите, что вы можете настроить отображение полномочий для использования.
В случае анонимных пользователей вы можете установить права доступа по умолчанию в качестве параметра конструктора org.springframework.security.web.authentication.AnonymousAuthenticationFilter
,