私はspring-security-aclプラグインを使用してACLセキュリティを実装しています。私は、次のドメインクラスを持っている:GrailsのセキュリティACLを使用してフィルタを選択するドロップダウン
package test
class Subitem {
String name
static belongsTo = [employer: Employer]
static constraints = {
name blank: false
}
}
package test
class Employer {
String name
static hasMany = [users: User, items: Subitem]
static belongsTo = User
static constraints = {
name blank: false, unique: true
}
String toString() {
name
}
}
サブアイテムを作成するために使用されるcreate.gspファイルでは、次の文があります:
<g:select id="employer" name="employer.id" from="${test.Employer.list()}" optionKey="id" required="" value="${subitemInstance?.employer?.id}" class="many-to-one"/>
EmployerControllerから:
def list = {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[employerInstanceList: employerService.list(params),
employerInstanceTotal: employerService.count()]
}
hereというチュートリアルの後、私はEmployerを扱う機能のいくつかをEmployerServiceというサービスに移しました:
@PreAuthorize("hasRole('ROLE_USER')")
@PostFilter("hasPermission(filterObject, read)")
List<Employer> list(Map params) {
Employer.list params
}
int count() {
Employer.count()
}
特定のEmployerクラスインスタンス内の情報へのアクセスは、ACLを使用して制限されています。現在、私はドロップダウンのデータベース内のEmployerのインスタンスをすべて見ることができます。これは、サービスリスト()ではなくコントローラリスト()を使用していると仮定していますが、フィルタリングされたリスト雇用者ドメインクラスの私はグラムを交換する場合は、:を選択:
<g:select id="employer" name="employer.id" from="${test.EmployerService.list()}" optionKey="id" required="" value="${subitemInstance?.employer?.id}" class="many-to-one"/>
私はサービスリスト()関数にマップパラメータを合格していない(と私はどのようにわからないので、私は内部サーバーエラーを取得します)タグ内でこれを行う:
URI /security/subitem/create
Class groovy.lang.MissingMethodException
Message No signature of method: static test.EmployerService.list() is applicable for argument types:() values: [] Possible solutions: list(java.util.Map), is(java.lang.Object), wait(), find(), wait(long), get(long)
私だけEmployerServiceリストから()関数を付属の情報を見たい - 私はこれをどのように行うようにしてください?ギャップ内から正しい機能をどのように参照するのですか?
- 編集08年3月16日0835:ありがとう@OverZealous、それは本当に役立つ、私はそれを実現していなかった。しかし、私はそれを試みても同じ問題を抱えています。私はEmployerとEmployerServiceの両方のlist()関数にprintln()ステートメントを入れて、g:selectタグが解析されたときに実際に呼び出されるようには見えません(g:selectを参照しても雇用者)。おそらく呼び出されている別のバージョンのlist()関数がありますか?または、他にどのようにg:ACLを考慮に入れて選択するのですか?
ありがとう、私はそれを知らなかった!しかし、g:selectがどのようにlist()関数を呼び出しているのか、ここでさらに根本的な問題があると思われます。上記の私の編集した質問を参照してください。 – John