Play Framework - Создание групп с помощью deadbolt2
Я пытаюсь реализовать группы deadbolt2, но я озадачен тем, как я должен этого достичь. Я использую Play 2.2.1, Deadbolt 2.2.RC4 и Hibernate 4.3.1 с базой данных MySQL.
Я смог реализовать некоторые из Deadbolt:. Я могу войти, зарегистрировать пользователей и комментировать методы с @SubjectPresent
Теперь я хотел бы обозначить свои функции следующим образом: @Restrict(@Group("Administrator"))
,
Я использовал Deadbolt2-java-example в качестве руководства, но часть, касающаяся групп, кажется мне неясной.
В модели AuthorisedUser у меня есть:
@ManyToMany
public List<SecurityRole> roles;
В моей базе данных это создает таблицу с именем AuthorisedUser_SecurityRole
У меня проблема в том, что я понятия не имею, как я должен запросить эту таблицу. Ввод имени таблицы даст мне ошибку во время выполнения. AuthorisedUser_SecurityRole is not mapped
, То же самое относится, если я печатаю roles
Что меня интересует, так это:
- Как и где я могу создавать новые группы?
- Как мне получить / запросить список
roles
(список групп, к которым принадлежит пользователь) - Как добавить группы для пользователя?
Пожалуйста, дайте мне знать, если вам нужно увидеть какой-либо мой код, но я не уверен, что вам нужно будет увидеть, так как большая часть кода является стандартной из примера deadbolt.
1 ответ
Роли
Роли, выполняемые пользователем, должны быть доступны на вашем AuthorisedUser
объект. AuthorisedUser
класс должен реализовать be.objectify.deadbolt.core.models.Subject
и getRoles()
метод возвращает ваш roles
,
Если вы используете ORM, такой как Hibernate, roles
будет заполнен при доступе к нему через AuthorisedUser
,
группы
Строки, предоставленные Group
аннотации должны соответствовать названию роли безопасности.
Итак, вы бы SecurityRole
чья getName()
Метод возвращает "Администратор". Все пользователи, которые являются администраторами, имеют эту роль. Когда пользователь пытается получить доступ к вашему ограниченному методу, Deadbolt проверяет роли, принадлежащие этому пользователю, и соответствует имени, указанному в Group
к названию роли.
Если у вас есть более одного параметра в Group
например, @Restrict(@Group("Foo", "Bar"))
пользователь должен иметь роли Foo и Bar. Параметры Group
определить отношения И
Чтобы иметь отношение ИЛИ, используйте несколько групп, например @Restrict(@Group("Foo"), @Group("Bar"))
- в этом случае пользователь должен иметь роль Foo или Bar.