Play Framework - 使用deadbolt2实现组

时间:2014-03-13 12:04:39

标签: hibernate playframework deadbolt

我试图实现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

,则同样适用

我当时想知道的是:

  1. 我如何以及在何处创建新群组?
  2. 如何检索/查询列表roles(用户所属的组列表)
  3. 如何向用户添加群组?
  4. 如果您需要查看我的任何代码,请告诉我,但我不确定您需要看到什么,因为大多数代码都是deadbolt示例中的标准代码。

1 个答案:

答案 0 :(得分:1)

<强>角色

用户持有的角色应该来自您的AuthorisedUser对象。 AuthorisedUser类必须实现be.objectify.deadbolt.core.models.SubjectgetRoles()方法返回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角色。