我刚刚注意到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完成分组角色,只需编写自己的动态处理程序或者有更好的方法吗?
感谢您提前回答!
答案 0 :(得分:1)
我也注意到了这一点并查看了一些来源。看起来@Restrictions
和@Restrict
注释仅替换为@Restrict
。来自对当前@Restrict
代码的评论:
在{@Group}角色中是AND,在{@Group}之间角色组是ORed。例如,@ Restrict({@ Group(“foo”),@ Group(“hurdy”,“gurdy)})表示@Subject必须具有foo角色或者具有hurdy和gurdy角色。
因此,您现在可以使用一个@Restrict
注释现在与新的@Group
注释结合使用。
答案 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;
}
});
}