Ich habe das audit-logging
Plugin in meiner Anwendung installiert. Die Grails-Version ist 2.1.1
und die Plugin-Version ist 1.0.1
.Doppel-Datensätze in Grails mit Audit-Logging-Plugin eingefügt
In meiner Config.groovy
Klasse habe ich diese hinzugefügt
auditLog {
verbose = true // verbosely log all changed values to db
logIds = true // log db-ids of associated objects.
// Note: if you change next 2 properties, you must update your database schema!
tablename = 'audit_logs' // table name for audit logs.
transactional = false
actorClosure = { request, session ->
org.apache.shiro.SecurityUtils.getSubject()?.getPrincipal()
}
und in meiner Domain-Klasse habe ich hinzugefügt diese
class Survey {
static auditable = true
static final int NO_RUNNING_SURVERY = 0
static final int RUNNING_SURVERY = 1
static final int CALL_NO_Record_SURVEY = 0
static final int CALL_Record_SURVEY = 1
static final int REALTIME_SURVEY = 0
static final int HISTORICAL_SURVEY = 1
static final int STANDARD_SURVERY = 2
String name
String description
int status
}
wenn ich hinzufügen, löschen und einige etwas zu aktualisieren. In meiner Tabelle audit_logs
wurde eine doppelte Aufzeichnung für eine Operation eingefügt, z.B. Wenn ich den Statuswert von meinem Controller-Klasse
def stopSurvey(Long id) {
def survey = Survey.findById(params['stop'])
survey.status = Survey.NO_RUNNING_SURVERY
redirect(action: "list")
}
es fügt zwei Datensätze pro Anruf ändern.
Ich testete das gleiche ohne die 'actorClosure' (nicht Shiro) und ich sehe dieses Verhalten nicht. Können Sie eine Beispielanwendung in github teilen, in der das Problem repliziert wird (mithilfe von Shiro)? Ich bemerke, dass Sie eine benutzerdefinierte Kennung im Controller verwendet haben, die ich nirgendwo in der Domänenklasse sehen kann. – dmahapatro