Тут есть 2 уровня проверки - это гость / юзер (видно по сессии), а если юзер то надо в БД сходить что бы узнать его права, значит это должна делать модель (контроллер не должен ходить в БД)?
Теоретически, если у вас залогиненный пользователь, в сессии можно хранить некоторую информацию, в частности я храню ACL / RBAC в сессии, (ну и имя там, еще что по мелочи чтобы не бегать в базу), а проверку делаю в конторллере (это потому что у нас мидлваря нету), точнее даже в экшене. В принципе и в конструктор контроллера иногда выношу, если точно знаю что весь контроллер под 1 правилом ходит. Это не бест практис, но иногда сползаю в такой вот гуанокод для скорости разработки мелких сайтиков. На больших проектах так не делаю ).