ramzes, вся проблема в том, что ты соотносишь правила к каждому конкретному юзеру. В резльтате получаем: кол.во юзеров * кол.во правил.
В варианте ролями, мы обьединяем множества юзеров в несколько ролей и сопоставляем правила уже с ролью юзера: кол.во ролей * кол.во правил.
Интерфейс добавления ролей очень прост: в таблицу User_Roles добавляем новую роль, с таблицы User_Rules собираем все уникальные экшины и записываем обратно помечая их идентификатором созданной роли и устанавливаем модификатор доступа как deny.