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

私もこれに気づき、いくつかのソースを調べました。と の両方の@Restrictions注釈@Restrictが のみに置き換えられたよう@Restrictです。@Restrict現在のコードのコメントから:

{@Group} 内では、ロールは AND 演算され、{@Group} 間ではロール グループは OR 演算されます。たとえば、 @Restrict({@Group("foo"), @Group("hurdy", "gurdy)}) は、@Subject が foo ロール、または hurdy ロールと gurdy ロールの両方を持っている必要があることを意味します。

@Restrictそのため、現在の 1 つの注釈を新しい注釈と組み合わせて使用​​することもできるようです@Group

ソースコードへのリンク

于 2013-11-19T20:56:35.240 に答える
0

なぜそれが欠落しているのかはわかりませんが、とにかくカスタム DynamicHandler を使用する方がクリーンだと思います。すべてのアノテーションにロール名を入力する必要がないため、動的アノテーションは短くなります。

@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 に答える