У меня в самописном движке реализовано так:
Есть таблица user_group, в колонками идут контролллеры и темплейты. Стоками группы пользователей. Скрипт в админке обновляет эту таблицу при написании новых контроллеров и темплейтов. Там же выставляются флаги для конкретных сущностей и пользователей 1/0, есть доступ или нет.
Обращение к таблице происходит в роутере. Если доступа у группы нет, возвращает restricted area.
Переменная User_group лежит в сессии.