Задать вопрос
@KuzmenkoArtem

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

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

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

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


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

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

Рассматривал помещение этой операции в очередь (queue), но размышляю есть ли другие способы.
  • Вопрос задан
  • 232 просмотра
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
dollar
@dollar
Делай добро и бросай его в воду.
LOCK TABLE имя_таблицы WRITE;
Ответ написан
Комментировать
Sanes
@Sanes
Сам себя запрети удалять.
Ответ написан
Ваш ответ на вопрос

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

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