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)