Я только сегодня более ли менее разобрался с RBAC в Yii. Подскажите пожалуйста как мне поступить в такой ситуации. Есть модель Users, которая имеет поля Username, Password, Email, Rating, Banned, RealName, About.
Для редактирования профиля пользователя используется одна и та же форма, некоторые поля которой скрываются в зависимости от прав пользователя. Сам пользователь может менять только свои Password, Email, RealName и About. Пользователь с правами модератора может менять все те же поля + banned для любого пользователя системы. Ну а пользователь с правами администратора может менять вообще любые поля любого пользователя.
Все бы хорошо, но количество групп пользователей и их привилегий может меняться. Например, может появиться супер-модератор, который может менять все то же, что и модератор + Rating.
При отправки данных из формы модель AR сохраняет только те данные, которые прописаны в rules самой модели. ТО, что не прописано — игнорируется. Т.е. просто скрывать поля нельзя, т.к. подделать любой POST запрос легко. Здесь нужно колдовать со сценариями, но делать что-то типа
if (Yii::app()->user->checkAccess('changeUsername') && Yii::app()->user->checkAccess('changeRating')) $model->setScenario('changeUsernameRating');
if (Yii::app()->user->checkAccess('changeUsername') && Yii::app()->user->checkAccess('changeBanned')) $model->setScenario('changeUsernameBanned');
совсем не хочется, т.к. получается громоздкий и запутанный огород