Группировка разрешений для сайта с использованием Spring Security - запрос на разработку - PullRequest
1 голос
/ 13 марта 2012

Я создаю веб-сайт Grails, где пользователи будут иметь доступ к ресурсам, которые они создают. До сих пор мне все ясно. Я определяю ROLE_USER и блокирую свои контроллеры и действия с помощью файла Config.groovy.

Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть потребность в поддержке группы пользователей, чтобы некоторые ресурсы, созданные пользователем, могли редактироваться / обновляться / удаляться другими пользователями из той же группы. Как связать пользователя с «группой» в весенней безопасности, какой дизайн / библиотеку мне следует использовать здесь?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

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

Однако, как только динамические роли будут созданы, вам все равно нужно будет иметь возможность подключать роли к создаваемым объектам. По сути, есть два способа сделать это:

  1. Списки контроля доступа
  2. Пользовательская логика

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

Списки контроля доступа, по сути, позволяют вам отображать разрешения между каждым пользователем и каждым экземпляром объекта. Как вы можете себе представить, это довольно трудоемко и может плохо работать, если у вас большое количество сущностей и пользователей.

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

1 голос
/ 13 марта 2012

Я не думаю, что Spring-Security обеспечивает такую ​​функциональность из коробки, поэтому вам придется делать это вручную. Для каждого класса домена, с которым вы работаете в этом виде, сохраняйте имя текущего пользователя, вошедшего в систему

def authenticateService

def user = authenticateService.principal() 
entity.setUser(user?.getUsername())

Затем в методе update / delete контроллера вы должны проверить, соответствует ли роль текущего вошедшего в систему пользователя. роль пользователя, создавшего объект. Если у вас есть совпадение, вы должны продолжить обновление / удаление, иначе выведите исключение / перенаправить пользователя на страницу ошибки

В качестве роли вы можете использовать роли безопасности Spring или создать свойство для созданного вами пользовательского объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...