Обновление Грааля вместо удаления - PullRequest
5 голосов
/ 07 января 2012

Есть ли в Grails простой способ запретить удаление для какого-либо класса домена?И, скорее, иметь флаг удаления в каждом домене, который обновляется всякий раз, когда что-то удаляется.

Кроме того, в действительности все методы list / show не должны отображать объекты, где флаг удаления имеет значение true.

Iзнаю, что я могу сделать это, вручную редактируя все мои методы 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() ]
}

1 Ответ

11 голосов
/ 07 января 2012

Вам придется перебирать методы удаления и перечисления всех классов вашего домена.Добавьте такой код в 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 = {}
}
...