【问题标题】:Play Framework - Implementing groups with deadbolt2Play Framework - 使用 deadbolt2 实现组
【发布时间】:2014-03-24 15:53:13
【问题描述】:

我正在尝试实现 deadbolt2 组,但我很困惑我应该如何实现这一目标。我正在使用带有 MySQL 数据库的 Play 2.2.1、Deadbolt 2.2.RC4 和 Hibernate 4.3.1。

我已经能够实现一些 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. 如何向用户添加组?

如果您需要查看我的任何代码,请告诉我,但我不确定您需要查看什么,因为大多数代码都是来自 deadbolt 示例的标准代码。

【问题讨论】:

    标签: hibernate playframework deadbolt


    【解决方案1】:

    角色

    用户拥有的角色应该可以从您的AuthorisedUser 对象中获得。 AuthorisedUser 类必须实现be.objectify.deadbolt.core.models.SubjectgetRoles() 方法返回你的roles

    如果您使用的是诸如 Hibernate 之类的 ORM,当您通过 AuthorisedUser 访问它时,roles 将被填充。

    群组

    提供给Group注解的字符串需要与安全角色的名称相匹配。

    因此,您将拥有一个SecurityRole,其getName() 方法返回“管理员”。作为管理员的所有用户都具有此角色。当用户尝试访问您的受限方法时,Deadbolt 会检查该用户持有的角色并将Group 中提供的名称与角色名称相匹配。

    如果Group 中有多个参数,例如@Restrict(@Group("Foo", "Bar")) 用户必须同时具有 Foo 和 Bar 角色。 Group 的参数定义了 AND 关系。

    要具有 OR 关系,请使用多个组,例如@Restrict(@Group("Foo"), @Group("Bar")) - 在这种情况下,用户必须具有 Foo 或 Bar 角色。

    【讨论】:

    • 感谢您的回复,我已经放弃了对这个的希望。我仍然不确定如何将用户添加到组中。我怎样才能插入AuthorisedUser_SecurityRole?还有一个完全集成的锁舌示例在线我可以看看吗?
    • 评论中没有足够的空间来完全进入这个,所以我会添加另一个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多