Тут скорее всего надо сделать так (в моем случае роли реализованы через консольную команду):
1) работаем с CPhpAuthManager и добавляем операции
$auth = Yii::app()->authManager;
/* @var $auth CPhpAuthManager */
$auth->clearAll();
$auth->createOperation('news_view', 'просмотр');
$auth->createOperation('news_add', 'добавление');
$auth->createOperation('news_edit', 'редактирование');
$auth->createOperation('news_delete', 'удаление');
2) работаем с задачами
$task = $auth->createTask('news_admin_task', 'Для администратора сайта разрешаем выполнять все действия сайта');
$task->addChild('news_edit');
$task->addChild('news_delete');
$bisRule = 'return Yii::app()->user->id==$params["news"]->user_id;';
$task = $auth->createTask('news_owner_task', 'Тут применяем бизнес-логику и разрешаем работать с отдельной новостью автору данной новости', $bisRule);
$task->addChild('news_edit');
$task->addChild('news_delete');
3) Работаем с пользователями сайта
$bizRule = 'return Yii::app()->user->isGuest;';
$role = $auth->createRole(Users::GUEST, 'гость может только смотреть новости', $bizRule);
$role->addChild('news_view');
$role = $auth->createRole(Users::AUTOR, 'автор наследуют все что может гость(просмотр новости) + задачу news_owner_task');
$role->addChild(Users::GUEST);
$role->addChild('news_owner_task');
$task->addChild('news_add');
$role = $auth->createRole(Users::ADMIN, 'админ может все!');
$role->addChild(Users::GUEST);
$role->addChild('news_admin_task');
$task->addChild('news_add');
4) Все сохраняем в файл data/auth.php
$auth->save();
5) Теперь работаем в нужном контролере на примере контролера редактирования
class NewsController extends Controller
{
public function actionEditNews($id)
{
$model = News::model()->findByPk($id); //грузим модель нужную
if(!Yii::app()->user->checkAccess('news_edit', array('news'=>$model))) //проверяем только операцию, в данном случае не вызовет исключение для пользователей админа и автора именно этого поста, для остальных выдаст 403 ошибку
{
throw new CHttpException(403);
}
}
}