Читал дискуссию несколько раз, читал вдумчиво, копал код HRBAC расширения, читал про Zend_ACL (намек на то, что я сначала думал
)
Чего я не делал - я не копал глубоко Yii-native RBAC
У меня сейчас стоит задача создания системы со сложным разветвленным контролем доступа. А роли, задачи и операции будут проясняться по ходу разработки и эксплуатации. Это CRM-система. Именно этим вызван мой интерес к крутой систему управления доступом, которая может все 
Резюмируя все что изложено выше:
-
Yii-native реализация не позволяет определить иерархию ролей. Другими словами, роли нельзя назначить роль так же как задачу или операцию.
-
В Yii RBAC нельзя применить разнознаковые правила.
Спецификацию по RBAC я просмотрел, но возможности назначит правило со знаком "минус" тоже не нашел. Читал вот это: http://csrc.nist.gov/groups/SNS/rbac/documents/draft-rbac-implementation-std-v01.pdf отсюда: http://csrc.nist.gov/groups/SNS/rbac/resources.html
То есть товарищ creocoder прав, что можно обойтись без этого. С другой стороны, бизрулы спецификация тоже не определяет, а без них обойтись нельзя.
В то же время, спецификация однозначно говорит о том, что наследование должно быть, там есть целый раздел, посвященный этому.
В любом случае, имея и наследование и бизрулы и разнознаковые правила, можно посторить систему гораздо более гибкую, чем с текущим RBAC
По поводу качества кода в HRBAC я согласен с creocoder, не фонтан. Я сначала думал допилить это расширение, но думаю что делать этого не буду, потому что в нем есть куча ненужного мне функционала, как, например, кондишены. Зачем - не знаю, но глючит не по-детски.
Очень понравились идеи из этого расширения:
-
Наследование через простое включение роли в другую роль
-
Возможность автоматической рповерки доступа по пути (/module/controller/action) Это очень удобно.
-
computedRoles. Это возможность сгенерить роли для текущего залогиненного юзера в текущем контексте. Так может решаться проблема editOwnPost при условии что в коде соответствующего экшена ничего не пишется.
Если сюда добавить:
-
разнознаковые правила
-
возможность разначения нескольких бизрулов на одно отношение и определение их приоритета
То получается (с моей точки зрения) идеальная, мощная и гибкая система управления правами.
Я смотрел код CDbAuthManager. Это намного лучше, чем HRBAC, но строчки типа такого:
if(count($names)<4)
$condition='name='.implode(' OR name=',$names);
else
$condition='name IN ('.implode(', ',$names).')';
Немного удивляют
Радует что такого мало - только это и SQL-запрос со странным именованием полей.
Мне для проекта нужна такая штука, да и вообще хотелось бы такое использовать у себя. Поэтому наверное буду программить, если вот это: http://www.openrbac.de/en_startup.xml меня не устроит. Что можете сказать по поводу описаного функцинала? Этого достаточно или надо что-то еще? Какие есть замечания?
creocoder, я понимаю, что все задачи могут быть решены с помощью нативного RBAC, но, согласитесь, с некоторыми улучшениями это решается гораздо красивее
Поэтому я бы хотел увидеть конструктивную критику и такие же предложения.