Направление верное.
То что вы описываете как класс Users, это своего рода репозитарий, который знает как получить, записать, и удалить записи из соответствующей таблицы.
а все проверки вроде "а может ли текущий пользователь удалять других пользователей" или "может ли пользователь просматривать других пользователей"
Это зона ответственности другого класса или группы классов, системы доступа, как правило это RBAC.
классы остаются незащищенными, если вдруг какая-то проверка окажется дырявой ...
Это вполне нормальная ситуация, эта проблема решается написанием тестов.
Подробнее можно почитать про принципы SOLID, а именно про S - Single responsibility