0

Grailsを使い始めたばかりで、spring-security-aclプラグインを構成しようとして壁にぶつかっています。私は公式のプラグインチュートリアルに従っていますが、アプリを実行しようとするとブートストラップフェーズを通過できません(Positionクラスではなくドメインクラスを使用しますReport。問題のほとんどはアプリのACL部分に関連しています。

私が乗り越えられない問題は、のgrantPermissions()機能にありBootstrap.groovyます。チュートリアルの指示によると、関数による開始は次のようになります。

private void grantPermissions() {
    def positions = []
    100.times {
        long id = it + 1
        def position = new Position(title: "position$id").save()
        positions << position
        aclService.createAcl(
                objectIdentityRetrievalStrategy.getObjectIdentity(position))
    }

IntelliJは、aclService.createAcl「引数の型を推測できません。この検査では、互換性のない型の割り当てが報告されます」と警告しています。実際、とにかくアプリを実行しようとすると、その行でクラッシュしてエラーが発生します。

| Error 2013-03-09 09:35:24,207 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Cannot get property 'id' on null object
Message: Cannot get property 'id' on null object
    Line | Method
->>   68 | doCall                           in BootStrap$_grantPermissions_closure4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     63 | grantPermissions                 in BootStrap
|     29 | doCall . . . . . . . . . . . . . in BootStrap$_closure1
...

どんな助けでも大歓迎です!


付録

重要な場合、私のPositionドメインオブジェクトは次のようになります。

class Position {

    String title
    Boolean draft

    static constraints = {
    }
}

この問題は関連しているとは思いませんが、チュートリアルからのACL関連の逸脱であったため、後世のために...私が解決した最初の問題はPositionService.groovyにありました。コードチャンクでIntelliJでエラーが発生していました:

def acl = aclUtilService.readAcl(position)

// Remove all permissions associated with this particular
// recipient (string equality to KISS)
acl.entries.eachWithIndex { entry, i ->
    if (entry.sid.equals(position) &&
            entry.permission.equals(permission)) {
        acl.deleteAce i
    }
}

問題はdeleteAce、汎用aclオブジェクトで関数を見つけることができなかったようです。MutableAclタイプを次のように指定することでこれを解決することができました

MutableAcl acl = aclUtilService.readAcl(position)
4

1 に答える 1

2

すべてのプロパティには暗黙のnullable:false制約がありますが、設定しているのはtitleプロパティのみです。draftが設定されていないため、検証が失敗し、すべてPositionがnullになります。

これは機能するはずです:

def position = new Position(title: "position$id", draft: false).save()
于 2013-03-09T15:58:36.077 に答える