私の Web インターフェイスには、写真のキャプションを更新するための ajax 呼び出しがあります。投稿は、写真のキャプションと publicId をサービスに送信します。
The service has
Photo photo = Photo.findByPublicId(params.publicId)
photo.caption = params.caption
photo.save()
ただし、Burt Beckwith の grails の本を読んだことがありますが、これは安全ではありません。現状では、ハッカーが publicId を私のサービスに投稿し、セッションに属さない写真のキャプションを更新する可能性があります。現在のユーザーのセッションに属する写真のみを更新する更新クエリの書き方について、GORM のアドバイスが必要です。関与する結合の数が原因で、私は迷っています。私はプロファイル/ユーザーの取得に精通しています:
User user = User.load(springSecurityService.principal.id)
Profile profile = Profile.findByUser(user, [lock:true])
Profile.findByUser(user, [lock:true]).photoAlbum.getPhotoWherePublicId(publicId) または4つの異なるSQL呼び出しを行うように見えるものの代わりに、更新全体のすべてを結合する1つのクエリではありません。
問題の階層で私が持っているドメインスキーマは次のとおりです。
//user from springsecurity for session/login management
class User {
//no reference to profile
}
class Profile {
PhotoAlbum photoAlbum
User user //reference to user
static constraints = {
photoAlbum(nullable:true)
}
}
class PhotoAlbum {
static hasMany = [photos:Photo]
static belongsTo = [profile:Profile]
}
class Photo {
static belongsTo = PhotoAlbum
String caption
String publicId
}