Права на просмотр записей в гриде

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
madmis
Сообщения: 17
Зарегистрирован: 2012.02.23, 15:29

Права на просмотр записей в гриде

Сообщение madmis »

Добрый день.
По форуму искал, но решения так и не нашел (не исключено, что плохо искал, ссылочке тоже буду рад).

Для ролей использую расширение rights.
Задача такая: показывать админу все записи, а пользователям только свои.
В таблице есть поле officer, в котором хранится id пользователя, который ответственный за запись. Собственно пользователи и должны видеть только те записи, где в поле officer их id.

Вот нашел топик с таким же вопросом (viewtopic.php?f=3&t=1095), но не понял, как там был решен этот вопрос.

В контролере есть метод

Код: Выделить всё

    public function actionAdmin() {
        $model = new Request('search');
        $model->unsetAttributes();  // clear any default values
        if (isset($_GET['Request'])) {
            $model->attributes = $_GET['Request'];
        }

        $this->render('admin', array(
            'model' => $model,
        ));
    }
 
Выводит все записи.

Собственно получается, что мне нужно только задать параметры запроса

Код: Выделить всё

if (superadmin) {
    выбираем все записи;
} else {
    выбираем записи, где officer=Yii::app()->user->id;
}
 
Пока я сделал так

Код: Выделить всё

    public function actionAdmin() {
        if (Yii::app()->user->checkAccess('Request.Admin')) {
            $model = new Request('search');
            $model->unsetAttributes();  // clear any default values
            if (isset($_GET['Request'])) {
                $model->attributes = $_GET['Request'];
            }

            if (!Rights::getAuthorizer()->isSuperuser(Yii::app()->user->getId())) {
                $model->officer = Yii::app()->user->getId();
            }

            $this->render('admin', array(
                'model' => $model,
            ));
        } else {
            throw new CHttpException(403, Yii::t("yii", "You are not authorized to perform this action."));
        }
    }
 
но нужно еще протестировать, посмотреть.

Люди, подскажите, кто как реализовывает такие вещи?
Примеры кода очень приветствуются.
Ответить