@KuzmenkoArtem

Как запретить удаление последнего пользователя?

Представим ситуацию. Есть система в ней есть пользователи-админы, допустим их сейчас 2.
Каждый админ может удалять других админов.
Но нужно сделать так что в системе остался по крайней мере один админ.

Первое что приходит в голову такая логика.
function deleteUser(int userId) {
    if (getAdminsCount() == 1) {
        abort();
    }

    makeSqlQueryToDeleteUser(userId); // прежде чем запрос зайдет в базу и она удалит запись, может пройти например 1 миллисекунда
}


Но если Админ А инициирует удаление, и при этом Админ Б тоже инициирует удаление перед самой операцией удаления от первого админа, то он пройдет проверку на последнего пользователя (т.к. сама операция удаления еще не запустилась).
И получается что оба пользователя удалят друг друга и в системе не останется не одного админа. (да шанс не большой, но все же)

Как бы вы решили данную проблему?

Рассматривал помещение этой операции в очередь (queue), но размышляю есть ли другие способы.
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 2
dollar
@dollar
Делай добро и бросай его в воду.
LOCK TABLE имя_таблицы WRITE;
Ответ написан
Комментировать
Sanes
@Sanes
Сам себя запрети удалять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы