Тогда мы перегружаем класс модели. Так как возможно проверять доступность не только стандартного CRUD, но и дополнительных действий. И мы на ровном месте получаем модель User на 300+ строк.
Насчет смешивания ответственности — Вы правы. Буду признателен, если поделитесь идеей, так как сам я не придумал как перегрузить ответственность на политики без оверкода, который, пожалуй, не мой выбор.
PS. Ожидаємо начался холивар)
Думаю, к следующему воскресенью будет готова.