Основная идея - сохранить ваши контроллеры настолько тонкими, насколько это возможно. В основном это означает, что контроллер принимает данные из сети, устанавливает переменные, необходимые в представлении, и выбирает представление.
Процесс определения роли, администратора и т. Д. - это вопрос, который нужно задать модели ... возможно, что-то вроде пользователя или роли и т. Д. Логика того, как это определяется в моделях. Контроллер координирует с этой информацией выбор вида или перенаправление, если это не разрешено, и т. Д.
Иногда я оказываюсь в контроллере, выполняя сложный запрос для получения определенного набора записей. Это запах кода, который мне нужен, чтобы взять этот запрос и создать область или метод в модели где-нибудь.
Если вы обнаружите, что в модели много вызовов, возможно, пришло время перенести ее в модель. Если вы обнаружите, что открываете много записей, принимаете решения и обновляете записи, возможно, пришло время перейти к модели.
Если необходимо решить, какой вид показывать пользователю (или показывать это!), Контроллер просто в порядке.