@KuzmenkoArtem

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

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

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

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


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

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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 22:30
200000 руб./за проект
24 апр. 2024, в 22:11
2000 руб./за проект
24 апр. 2024, в 21:49
10000 руб./за проект