Как реализовать пружинную безопасность ACL для совместного использования объекта группой пользователей без создания большого количества записей в таблице ACL_Entry

Подобно проблеме, упомянутой ниже a-can-update?s=1|4.3123">Как реализовать ACL на уровне группы? Например. только учителя в школе А могут обновлять календарь школы А

Я пытаюсь решить сценарий ниже. Использование безопасности acl spring

У нас есть сценарий, чтобы поделиться результатами учеников с группой учителей. В этом сценарии, когда учитель входит в систему, он может видеть результат, только если учитель имеет разрешение на чтение объекта «Результат». Если нам нужно поделиться результатом с группой учителей, состоящей из 10 человек. в группе с разрешением на чтение нам нужно дать 10 всего в таблице ACL_Entry. Это будет сложно, так как количество записей будет увеличиваться с увеличением числа членов группы и увеличением разрешений. Есть ли другой способ, чтобы, если я поделюсь результатом с группой, будет только одна запись acl с группой, имеющей разрешение на чтение объекта результата, с помощью которой учителя автоматически должны получить разрешение на чтение объекта. Можете ли вы также объяснить на примере, как будет выглядеть схема.

Пожалуйста помоги


person anu    schedule 18.02.2016    source источник


Ответы (2)


Возможный дубликат: spring-security-authorization-for-custom-usergroups

Если вы посмотрите на этот вопрос, вы найдете это возможное решение:

Я использую группы пользователей с механизмом ACL. В основном я удостоверяюсь, что при создании ACL для объекта устанавливается владелец. Затем, когда другой пользователь пытается получить доступ к этому объекту, группы владельцев проверяются на предмет совпадения.

Это, конечно, означает, что когда пользователь меняет свои группы, объект «уходит вместе с ним».

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

Безопасность объектов домена Spring Security (ACL)

На самом деле это две другие возможности, отличные от того, что описано в вопросе, который вы связали.

В комментариях к вопросу, который я связал, также есть краткий разговор, поэтому обязательно прочитайте его, если вы заинтригованы.

person JIMI    schedule 18.02.2016
comment
Спасибо за вашу помощь, Джими. Я использовал сценарий, упомянутый в моем ответе, чтобы разобраться с этим. Но я хочу получить лучшее решение этой проблемы, попробовав ваше решение. Я не получил много примеров, связанных с обработкой общего доступа к группе с помощью acl. Не могли бы вы поделиться примером, который объясняет два приведенных выше сценария для лучшего понимания ваших решений. - person anu; 19.02.2016

Чтобы разобраться с вышеуказанной проблемой, я использовал подход ниже. У меня есть пользователи и таблица user_role в моей схеме. Я использую db в качестве диспетчера аутентификации в контексте безопасности.

SchoolA уже является пользователем моего приложения. Всякий раз, когда учитель добавляется в группу schoolA, я добавляю schoolA в качестве роли учителя вместе с ролью пользователя. При совместном использовании объекта результата с группой schoolA с разрешением на чтение. Я рассматриваю schoolA как GrantedAuthoritySid вместо PrincpalSid. Таким образом, основной столбец будет ложным для sid SchoolA в таблице ACL_SID. Всякий раз, когда учитель входит в систему при получении результатов, мы проверяем, есть ли у учителя разрешение на чтение объекта результата. Но поскольку у учителя есть роль schoolA, а роль schoolA имеет разрешение на чтение. Я могу получить объект результата, когда учитель входит в систему. Таким образом, я решил свою вышеуказанную проблему.

person anu    schedule 19.02.2016