Сорри что времени много прошло - но лучше же поздно, чем никогда?
В общем случае такое для СУБД делается только руками, потому что нужно идти на множество компромиссов и допущений.
Пример:
Пользователь 1 создал запись ну пусть карточки клиента, а второй - выписал документ на этого клиента.
И как тут можно отменить действие первого?
В SQL примерно так работает механизм транзакций (он у тебя в БД априори), но:
1. Транзакция может подтверждаться только тем клиентом, который ее открыл. И только в той же сессии.
2. На объекты в неподтвержденной транзакции не может быть ссылок из других транзакций.
3. ORM работает на более высоком уровне. Его придется обходить.
Соотвествнно, в твоём случае, я бы делал так:
1. На каждую таблицу создавал бы таблицу логов (скриптами, ессно), все действия с осн. таблицей логгировать тригерами (которые тоже создаются скриптом, чтобы в случае изменения полей / и т.п. просто и быстро пересоздать все)
В логе для update / delete хранил бы старые элементы записей. Для insert-а вобщем не важно
.
2. Пользователю с правами давал бы на просмотр эти таблицы с выбором, до какого элемента откатывать.
3. Ну и раздел с удалениями не забыть