Хочу обсудить варианты реализации шалона Maker-checker на PHP+SQL. Когда изменения авторизует другой пользователь, имеющий на это право. Возьмем для определенности сущность Товар. На самом деле это может быть что угодно. Видится два варианта: а) В таблице товаров есть поле состояния, например enum('Pending', 'Approved', 'Declined'). Maker создает запись с с первым состоянием, Checker меняет статус. б) Есть отдельная таблица approvals в которой хранятся запросы на изменение. Новый объект может быть там в сериализованном виде. Maker добавляет туда запись, Checker создает объект из сериализованных данных. Ну ли отмечает отказ. Первый вариант вроде бы проще, но кое-что усложняет. Например уникальные ключи. Или сложно реализовать update а не create. А есть еще delete... Второй тоже не идеал. Сложно, например, управляться со связанными данными, пока записи нет в целевой таблице. Типа документ с табличной частью. В моей практике есть вариант Б. Пыхтим, но тащим. А как у вас? Буду благодарен за ссылки. Вот что я нашел в интернетах: Код (Text): * https://en.wikipedia.org/wiki/Maker-checker * https://medium.com/hevo-data-engineering/building-a-maker-checker-system-with-audit-trail-8dd3ea9bf29d * https://www.youtube.com/watch?v=Jzt-y4JZbr4 + https://github.com/cjmellor/approval * https://www.quora.com/How-do-I-implement-Maker-Checker-Concept-in-Laravel-5-2 --- Добавлено --- P.S. Богомерский форум превращает ссылку на ютуб во встроенный медиа. Я обиделся и сделал ссылки нетрансформируемыми )))
я бы комбинировал из этих двух... беря из каждого его сильные стороны мое предложение вариант в) в) - Создание - берется из а) ... то есть объект создается физически, со статусом для проверки и одобрения - Редактирование, берем из б) - добавляя измененный объект в отдельную таблицу, саму же изначальную запись не трогаем - но даем какой-то новый статус - типа "есть изменения на одобрении". При одобрении - заменяем объектом из таблицы, статус меняем на одобрен - Удаление, самому объекту новый статус "есть запрос на удаление" - при удалении удаляем физически как-то так...