Вобщем запилил себе список контроля доступа и теперь возник вопрос как быть со ссылками на модули и/или определенными действиями, насчет них я думаю можно будет отделить от скрипта в отдельные модули, но со ссылками проблема, казалось бы мелочь, но все же хотелось бы как то решить ее. Казалось бы что там, создать функцию которая будет проверять группу пользователя и возвращать булево значение, но я бы хотел что бы модули ничего не знали о группах, т.к. иначе пострадает гибкость acl.
Пару слов о реализации:
Таблицы в бд:
cms_modules - содержит id и uri модулей
users_groups - содержит id и имя групп
users - содержит данные пользователей, в данном случае нас будет интересовать только поле `group` которое содержит id группы
cms_access_list - служит для настройки доступа. Имеет поля `gid` - идентификатор группы и `mid` - идентификатор модуля.
Далее сразу после роутинга проверяем доступ, если доступ запрещен, то перенаправляем на страницу ошибки.
В итоге вырисовывается такая картина. У нас есть очень гибкая система контроля доступа, можно создавать почти неограниченное число групп (ограничивается разве что размером поля id в Таблице содержащей список групп) удалять редактировать группы, доступ можно настраивать как мне угодно.
Вроде как бы все.