Весенние вопросы ACL - PullRequest
       27

Весенние вопросы ACL

2 голосов
/ 04 августа 2011

Я использую новую Spring Security 3.1 и у меня есть несколько вопросов к Spring Security ACL.

  1. Итак, допустим, у меня есть объект и я хочу определить ACL для него. Я создаю запись ACL и хочу назначить ее группе пользователей; не роль (GrantedAuthoritySid), не один пользователь (PrincipalSid), а группа пользователей. Я искал повсюду для примера, но не смог найти ни одного. Не могли бы вы указать мне пример или класс, который помог бы мне в этом сценарии?

  2. Итак, теперь я хочу создать второй объект, который связан с первым объектом (он должен применяться к тем же пользователям). Это может быть обновление статуса для первого объекта, например. Мой GrantedAuthority или Principal имеет другую маску разрешений для второго объекта. Также первый объект имеет 2 GrantedAuthorities (2 ACLEntries), а обновление состояния имеет только один. Если я использую наследование ACL, наборы разрешений для первого объекта не совпадают с набором разрешений для второго. Мой вопрос заключается в том, как я могу смоделировать это так, чтобы GrantedAuthorities для двух объектов автоматически сохранял согласованность при сохранении разных масок разрешений. Одна идея состоит в том, чтобы использовать составной шаблон для связи GrantedAuthority второго объекта с GrantedAuthority первого объекта (вместо того, чтобы связывать его с пользователями).

  3. У ACL есть владелец. Для чего владелец? Какую роль он играет для ACL или для записей ACL?

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Это довольно сложно. Я пересмотрел исходный код Spring, чтобы понять принцип, и это заняло у меня много времени. Я не могу точно сказать вам, как я это реализовал (потому что это очень специфично для проекта, над которым я работаю), но постараюсь дать вам отправную точку.

То, что я сделал, было:

  • Реализация пользовательских org.springframework.security.acls.sid.Sid. Это Sid ссылается не на authority или user, а на какой-то групповой объект, который имеет идентификатор и ссылается на два разных объекта. Чтобы использовать этот групповой объект как Sid, вы должны создать ACL_Sid -запись с id объекта как ACL_sid.sid. ACL_sid.principal должно быть целым числом, отличным от 0 или 1, которое необходимо проверить в тесте в пользовательском LookupStrategy (см. Ниже и исходный код Spring).
  • Расширьте org.springframework.security.acls.sid.SidRetrievalStrategyImpl, чтобы получить пользовательские Sid из базы данных.
  • Реализация пользовательских org.springframework.security.acls.jdbc.LookupStrategy. Я скопировал существующую реализацию (потому что класс был финальным) и изменил ее для своих нужд.
  • Все соединено в конфигурации Spring, потому что для конфигурации Spring ACL по умолчанию не требуется, какие классы она должна использовать (а не значения по умолчанию)

Посмотрите на исходный код Spring и посмотрите, как это делается.

0 голосов
/ 09 августа 2011

Чтобы назначить объект группе пользователей, для каждого пользователя должна быть запись ACL для одного и того же объекта.Это может привести к значительному увеличению количества записей ACL.

...