1

我刚刚注意到@RestrictionsDeadbolt 2.2 和 deadbolt-2.1 版本中缺少注释。在示例和文档中对其进行了解释(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

这里没有:

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

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

有没有它丢失的原因?我如何在没有注释的情况下使用 OR 完成对角色的分组,只需编写我自己的动态处理程序还是有更好的方法?

感谢您提前回答!

4

2 回答 2

1

我也注意到了这一点,并查看了一些来源。看起来 the@Restrictions@Restrictannotations 都被替换为 only @Restrict。从对当前@Restrict代码的评论中:

在 {@Group} 内,角色是 AND,而在 {@Group} 之间,角色组是 ORed。例如,@Restrict({@Group("foo"), @Group("hurdy", "gurdy)}) 表示@Subject 必须具有 foo 角色或同时具有 hurdy 和 gurdy 角色。

因此,看起来您@Restrict现在也可以将一个注释与新注释结合使用@Group

链接到源代码

于 2013-11-19T20:56:35.240 回答
0

好吧,我不知道它为什么会丢失,但我认为使用自定义 DynamicHandler 无论如何都会更干净。动态 Annotation 更短,因为不需要在每个 Annotation 中键入角色名称。

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

@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;
            }
        });
}
于 2013-10-01T15:14:21.020 回答