Playframework 2.0 门闩限制注释缺失-间隙2.1.1,门闩2.1

Playframework 2.0 门闩限制注释缺失-间隙2.1.1,门闩2.1,playframework-2.0,playframework-2.1,scala-template,deadbolt,Playframework 2.0,Playframework 2.1,Scala Template,Deadbolt,我刚刚注意到,Deadbolt 2.2和Deadbolt-2.1版本中都缺少@Restrictions注释。 在示例和文档中,将对其进行解释() 在这里它存在(DB-2.1.x): 在这里,它不是: 锁紧螺栓2.1: 硕士(2.2): 它丢失有什么原因吗?我如何完成角色分组?使用或不使用注释,只需编写自己的动态处理程序,还是有更好的方法 感谢您提前回复 我不知道为什么它不见了,但我认为使用定制的钱德勒更干净。动态注释更短,因为不需要在每个注释中键入角色名称 使用@Restrictions注释时,

我刚刚注意到,Deadbolt 2.2和Deadbolt-2.1版本中都缺少
@Restrictions
注释。 在示例和文档中,将对其进行解释()

在这里它存在(DB-2.1.x):

在这里,它不是:

锁紧螺栓2.1:

硕士(2.2):

它丢失有什么原因吗?我如何完成角色分组?使用或不使用注释,只需编写自己的动态处理程序,还是有更好的方法


感谢您提前回复

我不知道为什么它不见了,但我认为使用定制的钱德勒更干净。动态注释更短,因为不需要在每个注释中键入角色名称

使用@Restrictions注释时,它将如下所示:

@Restrictions({@And("foo"),@And("bar"), @And("more_roles"})
@Dynamic("custom_restriction")
使用动态处理程序,它看起来如下所示:

@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;
            }
        });
}

我不知道为什么它不见了,但我认为使用定制的钱德勒更干净。动态注释更短,因为不需要在每个注释中键入角色名称

使用@Restrictions注释时,它将如下所示:

@Restrictions({@And("foo"),@And("bar"), @And("more_roles"})
@Dynamic("custom_restriction")
使用动态处理程序,它看起来如下所示:

@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;
            }
        });
}

我也注意到了这一点,并查看了一些来源。看起来
@Restrict
@Restrict
注释都被替换为仅
@Restrict
。从当前
@Restrict
代码的注释中:

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

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


我也注意到了这一点,并查看了一些源代码。看起来
@Restrict
@Restrict
注释都被替换为仅
@Restrict
。从当前
@Restrict
代码的注释中:

在{@Group}中,角色是and,在{@Group}之间,角色组是OR。例如,@Restrict({@Group(“foo”),@Group(“hurdy”,“gurdy”)意味着@Subject必须具有foo角色或同时具有hurdy和gurdy角色

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