5

Grails でドメイン クラスの削除を許可しない簡単な方法はありますか? むしろ、何かが削除されるたびに更新される各ドメインに削除フラグがあります。

また、事実上、すべての list/show メソッドは、delete フラグが true のオブジェクトを表示すべきではありません。

すべてのコントローラーですべての CRUD メソッドを手動で編集することでそれを行うことができることはわかっていますが、どこかでフラグを変更することですべてを実行できる Grails で作業する場合、それは少し面倒に思えます!!

私の通常のリスト メソッドは次のようになります。私のプロジェクトのほとんどすべてのリスト メソッドでは、ユーザーはユーザーの会社にのみ属するものにアクセスできます。

def list = {
    params.max = Math.min(params.max ? params.int('max') : 10, 100)
    def documentsList = Documents.createCriteria().list(params){
        eq("company.id",session.companyId)  
        maxResults(params.max)
        order("dateCreated","desc")
        //firstResult(params.offset)
    }
    [documentsInstanceList: documentsList , documentsInstanceTotal: documentsList.getTotalCount() ]
}
4

1 に答える 1

11

すべてのドメイン クラスの delete メソッドと list メソッドを無視する必要があります。このようなコードを Bootstrap に追加します

class BootStrap {

  def grailsApplication

  def init = { servletContext ->

  for (dc in grailsApplication.domainClasses) {

     dc.clazz.exists(-1);  //to register meta class

     def gormSave = dc.clazz.metaClass.getMetaMethod('save');         
     dc.clazz.metaClass.delete = {  ->
        delegate.deleted = true
        gormSave.invoke delegate
     }

     dc.clazz.metaClass.delete = { Map args  ->
        delegate.deleted = true
        gormSave.invoke(delegate, args)
     }

     dc.clazz.metaClass.static.list = {  ->
        def crit = delegate.createCriteria();
        def list = crit.list{
          eq('deleted', false)
        }
        return list;
     }



  }
}

   def destroy = {}
}
于 2012-01-07T09:41:09.653 に答える