我试图实现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示例中的标准代码。
答案 0 :(得分:1)
<强>角色强>
用户持有的角色应该来自您的AuthorisedUser
对象。 AuthorisedUser
类必须实现be.objectify.deadbolt.core.models.Subject
,getRoles()
方法返回roles
。
如果你正在使用像Hibernate这样的ORM,当你通过roles
访问它时会填充AuthorisedUser
。
<强>组强>
提供给Group
注释的字符串需要与安全角色的名称相匹配。
因此,您将拥有SecurityRole
方法返回&#34;管理员&#34;的getName()
。所有管理员用户都具有此角色。当用户尝试访问您的受限方法时,Deadbolt会检查该用户持有的角色,并将Group
中提供的名称与角色名称相匹配。
如果Group
中有多个参数,例如@Restrict(@Group("Foo", "Bar"))
用户必须同时拥有Foo和Bar角色。 Group
的参数定义AND关系。
要建立OR关系,请使用多个组,例如@Restrict(@Group("Foo"), @Group("Bar"))
- 在这种情况下,用户必须具有Foo或Bar角色。