Списки контроля доступа Spring Security в хранилище данных App Engine

Мы используем инфраструктуру ACL Spring Security в сочетании с App Engine Datastore. Мы не используем низкоуровневый API хранилища данных, а используем платформу Objectify для доступа к хранилищу данных. Нам необходимо преобразовать модель ACL Spring Security (подходящую для СУБД) в модель, более подходящую для объектно-ориентированного хранилища данных без схемы. Пока что мы получили две сущности, описанные ниже.

Acl

  • id: Long
  • domainObject: Key (предок / родитель)
  • записи: Список ‹AclEntry› (встроенный)
  • владелец: String

AclEntry

  • sid: String
  • принципал: логическое
  • маска: int
  • предоставление: логическое

Почти каждый раз, когда ACL извлекается известным объектом domainObject (не по идентификатору ACL), поэтому мы решили использовать объект домена в качестве предка для данного ACL, чтобы мы могли использовать запрос предка (строго согласованный) и получать максимальную отдачу. актуальные данные, которые имеют решающее значение в случае ACL

Дело в том, что такой модели недостаточно для запросов типа «К каким [объектам] имеет доступ данный пользователь (sid)?» где [entity] может быть любой доступной сущностью, такой как проект, группа, ...

Есть ли у кого-нибудь опыт работы с Spring Security ACL в базе данных NoSQL, особенно в App Engine Datastore? Любой намек будет оценен по достоинству.




Ответы (1)


Сначала вы, вероятно, подумаете, что мой ответ неверен, но ваша проблема выходит за рамки Spring Security: вам нужно изменить свой подход к данным.

Если вы используете хранилище данных «NO SQL», это позволяет вашему приложению масштабироваться, а не структурировать его вокруг ваших данных.

Вам необходимо моделировать свои сущности на основе ваших вариантов использования, а не плотно вписывать их в структуру, созданную для РСУБД. Это компромисс для производительности ИМХО.

Если вы не желаете жертвовать структурой в пользу производительности, это, вероятно, означает, что ваше приложение больше подходит для Google Cloud SQL :)

Я могу ошибаться: расскажите подробнее о своем варианте использования? вот как вы получите полезный совет с базой данных "NoSQL".

person Michael Técourt    schedule 18.03.2014