Я использую плагин 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 для использования другой логики.Кажется, стыдно повторять большую часть одного и того же кода ...