if ($user['rights'] < $rights)
Как это должно сработать в случае, если $user = false ?
Скорее всего, из-за ошибки это условие просто принимается как false, и проверка ваша проходит.
UPD: Всё-таки возвращает true, но я бы не рекомендовал полагаться на неявные преобразования типов, тем более, начиная с PHP 7.4 это генерирует Notice, а в будущих версиях однажды может быть убрано.