Одна из реализаций это создание группы объектов, отвечающих за проверку прав доступа.
Назовём его PermissionManager. В этот менеджер можно добавлять группы объектов Permission* , реализующие интерфейс с методами hasPermission($object, $user, $method) и hasPermissionToСlass($className, $user, $method), и соответствующие по названию проверяемому объекту/классу.
Первый используется для проверки доступа к существующему объекту.
Второй имеет обычно более высокий приоритет, чем первый при проверке доступа и отвечает за возможность создания объекта с указанным названием или возможностью пользователю просматривать класс в принципе, без зависимости от его содержания.
Соответственно, используя такой механизм можно обратиться к PermissionManager (его разумно в DI-контейнер помещать) из метода вашего контроллера и проверять права пользователя на то, что вам нужно.