Deadbolt Restrictions Annotation missing - Play 2.1.1,Deadbolt 2.1

时间:2013-10-01 09:57:59

标签: playframework-2.0 playframework-2.1 scala-template deadbolt

我刚刚注意到Deadbolt 2.2和deadbolt-2.1版本中缺少@Restrictions注释。 在示例和文档中对其进行了解释(http://deadbolt-2-java.herokuapp.com/#controller-Restrictions)。

此处存在(DB-2.1.x):https://github.com/schaloner/deadbolt-2/tree/D2-1.x/project-code/app/be/objectify/deadbolt/actions

这里没有:

deadbolt 2.1:https://github.com/schaloner/deadbolt-2-java/tree/deadbolt-2.1/app/be/objectify/deadbolt/java/actions

master(2.2):https://github.com/schaloner/deadbolt-2-java/tree/master/app/be/objectify/deadbolt/java/actions

它有缺失的原因吗?如何在没有Annotation的情况下使用OR完成分组角色,只需编写自己的动态处理程序或者有更好的方法吗?

感谢您提前回答!

2 个答案:

答案 0 :(得分:1)

我也注意到了这一点并查看了一些来源。看起来@Restrictions@Restrict注释仅替换为@Restrict。来自对当前@Restrict代码的评论:

  

在{@Group}角色中是AND,在{@Group}之间角色组是ORed。例如,@ Restrict({@ Group(“foo”),@ Group(“hurdy”,“gurdy)})表示@Subject必须具有foo角色或者具有hurdy和gurdy角色。

因此,您现在可以使用一个@Restrict注释现在与新的@Group注释结合使用。

Link to source code

答案 1 :(得分:0)

嗯,我不知道它为什么会丢失,但我认为使用自定义DynamicHandler无论如何都是清洁的。动态注释较短,因为角色名称不需要在每个注释中输入。

使用@Restrictions Annotation,它看起来像这样:

@Restrictions({@And("foo"),@And("bar"), @And("more_roles"})

使用动态处理程序,它看起来像这样:

@Dynamic("custom_restriction")

动态处理程序中的代码:

static {
        HANDLERS.put("custom_restriction", new AbstractDynamicResourceHandler() {
            public boolean isAllowed(String name, String meta, DeadboltHandler deadboltHandler, Http.Context context) {
                Subject subject = deadboltHandler.getSubject(context);
                boolean allowed = false;
                if (DeadboltAnalyzer.hasRole(subject, "foo") || DeadboltAnalyzer.hasRole(subject, "bar") || DeadboltAnalyzer.hasRole(subject, "more_roles")) {
                    allowed = true;
                }

                return allowed;
            }
        });
}