Предоставление разрешений в Spring Security ACL - PullRequest
3 голосов
/ 26 мая 2011

Я использую плагин Spring Security ACL в Grails 1.3.7, но мой вопрос, вероятно, более общий: я хотел бы разрешить пользователям, которые имеют BasePermission.READ доступ к объекту, иметь возможность предоставлять такое же разрешениедругим пользователям.Если пользователь1 имеет доступ для чтения к документу, он должен иметь возможность поделиться им с пользователем2 и тем самым предоставить ему доступ для чтения к тому же документу.

При первом создании документа пользователю user1 предоставляется доступ на чтение, поэтому я вижу это в журнале:

DEBUG   grails.app.service.org.grails.plugins.springsecurity.service.acl.AclUtilService     Added permission BasePermission[...............................R=1] for Sid PrincipalSid[User user1] for com.fxpal.ara.Document with id 1

Затем я пытаюсь предоставить разрешение READ пользователю user2 при аутентификации как user1Я получаю это исключение:

org.springframework.security.acls.model.NotFoundException: Unable to locate a matching ACE for passed permissions and SIDs

Итак, мои вопросы: 1. Требуется ли наличие BasePermission.ADMINISTRATION, чтобы позволить пользователям предоставлять разрешения другим пользователям?2. Есть ли какой-то другой способ предоставления разрешений при наличии только частичных разрешений?Где реализована эта политика и можно ли ее заменить?

Обновление:

Ну, я подумал, что мог бы добавить новую реализацию AclAuthorizationStrategy, которая определяет методpublic void securityCheck(Acl acl, int changeType), но этот метод не принимает запрошенное разрешение в качестве параметра, что мешает моей стратегии проверки совместимости разрешений.Следующее, что нужно сделать, - это повторно реализовать AclImpl для использования другой логики.Кажется, стыдно повторять большую часть одного и того же кода ...

1 Ответ

0 голосов
/ 19 августа 2013

Вы можете решить эту проблему, создав

<bean id="aclAuthorizationStrategy" class="org.springframework.security.acls.domain.AclAuthorizationStrategyImpl">
     <constructor-arg>
         <bean class="org.springframework.security.core.authority.SimpleGrantedAuthority">
              <constructor-arg>
                   <value>ROLE_ADMINISTRATOR</value>
              </constructor-arg>
         </bean>
     </constructor-arg>
</bean>

Здесь ROLE_ADMINISTRATOR должна быть ролью, которую объект «Зарегистрированный пользователь» имеет в качестве полномочий. По сути, любой пользователь с этой ролью может управлять разрешениями.

...