RBAC и описание ролей в файле

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Аватара пользователя
ludaeda
Сообщения: 2
Зарегистрирован: 2011.10.16, 16:32

Re: RBAC и описание ролей в файле

Сообщение ludaeda »

Sam Dark, добавили бы эту ссылку http://www.simplecoding.org/yii-php-fra ... -rbac.html к статье, думаю всем было бы проще изучать.
lolo
Сообщения: 1
Зарегистрирован: 2012.01.14, 17:59

Re: RBAC и описание ролей в файле

Сообщение lolo »

Здравствуйте, я в точности скопировал ваши коды, но у меня выводит вот такая ошибка:

"Property "CWebApplication.authManager" is read only."

Буду очень благодарен, если скажете как это исправить
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

а в кофиге прописывали все как надо ?
Аватара пользователя
RSol
Сообщения: 325
Зарегистрирован: 2010.05.07, 08:36
Откуда: Северодонецк, Украина
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение RSol »

lolo писал(а):Здравствуйте, я в точности скопировал ваши коды, но у меня выводит вот такая ошибка:

"Property "CWebApplication.authManager" is read only."

Буду очень благодарен, если скажете как это исправить
Будьте добры, дайте больше информации. Строка ошибки, файл и т.д. и собственно тот файл.
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: RBAC и описание ролей в файле

Сообщение esche »

Ekstazi писал(а):а в кофиге прописывали все как надо ?
Нет.. он прописал authManager на уровень выше :D
2 lolo.. Его надо размещать в components

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

    'components'=>array(
        'authManager' => array(
...
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

:-D)
php
Сообщения: 5
Зарегистрирован: 2012.01.20, 04:57

Re: RBAC и описание ролей в файле

Сообщение php »

esche писал(а):
Ekstazi писал(а):а в кофиге прописывали все как надо ?
Нет.. он прописал authManager на уровень выше :D
2 lolo.. Его надо размещать в components

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

    'components'=>array(
        'authManager' => array( 
Может это в статью добавить, а то вот я тоже столкнулся :roll:
regina
Сообщения: 2
Зарегистрирован: 2012.03.15, 16:39

Re: RBAC и описание ролей в файле

Сообщение regina »

Добрый день. Я только начала работать с yii и не могу разобраться описанием ролей.
Делаю как в RBAC и описание ролей в файле выдает ошибку Property "CWebApplication.authManager" is read only.
вот на этом остановилась и не знаю где определить:
Чтобы приложение использовало наш класс WebUser, необходимо сконфигурировать компонент user:

'user'=>array(
'class' => 'WebUser',
// …
),


Еще не знаю куда надо вставить этот код
if(Yii::app()->user->checkAccess('administrator')){
echo "hello, I'm administrator";
}

И какой должен быть файл authManager ?
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение SpiLLeR »

Property "CWebApplication.authManager" is read only.
Проверьте у вас описание authManager находится в разделе components конфига?
Предупрежден - значит вооружен.
devKP.ru
regina
Сообщения: 2
Зарегистрирован: 2012.03.15, 16:39

Re: RBAC и описание ролей в файле

Сообщение regina »

Ошибку перестало выдовать, но теперь не заходит под пользователем пишет Incorrect username or password. Что не так?
maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: RBAC и описание ролей в файле

Сообщение maxyer »

Здравствуйте !
Сначала прочитал материал в руководстве по поводу использования RBAC, после чего вашу статью "RBAC и описание ролей в файле" .
В руководстве мне все более менее понятно, а вот ваша статья слегка запутала.
Объясните пожалуйста для чего потребовалось переопределять PhpAuthManager и WebUser - разве без этого RBAC работать не будет ?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

Будет. Рецепт для тех, кто хочет писать правила руками и хранить их рядом с конфигами. Можно делать так, как официальном руководстве настроив в конфиге по вкусу.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

Если класс не переопределять, то для каждого пользователя будет храниться запись о связи роли с ним в auth.php. Согласитесь, тогда уж лучше CDbAuthManager использовать или вариант из рецепта.
maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: RBAC и описание ролей в файле

Сообщение maxyer »

Ekstazi писал(а):Если класс не переопределять, то для каждого пользователя будет храниться запись о связи роли с ним в auth.php. Согласитесь, тогда уж лучше CDbAuthManager использовать или вариант из рецепта.
Гм ...
Пока не могу понять, чем плохо, если запись о роли пользователя хранится в auth.php.
Разве что как-то децентрализовано получается - основные сведения о пользователе в БД, а о его роли в auth.php
И, кстати, разве в вашем случае эта информация в auth.php не сохраняется ?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

Вы представляете себе php файл размером больше 100 мб с записями о связи каждого конкретного пользователя с ролью. Дальше думаю сами поймете - потребление памяти, скорость работы такого подхода и так далее.
egorio
Сообщения: 11
Зарегистрирован: 2011.03.24, 13:05

Re: RBAC и описание ролей в файле

Сообщение egorio »

Мне кажется, делать что-то с паролем в beforeValidate некорректно, т. к. станет невозможно проверить например array('password', 'length', ...) или array('password', 'match', ...).

Так же нет никакого смысла хешировать confirmPassword - лишняя нагрузка. Сравнить их можно и в сыром виде, а вот захешировать пароль можно либо в afterValidate... а лучше даже beforeSave который вызовется в последний момент.
mc-bear писал(а):Еще вариант вместо

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

protected function beforeValidate(){
    $this->password = md5($this->password);
        return parent::beforeValidate();
    }
использовать фильтры

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

public function rules()
{
   array('password','hashPassword','on'=>'register,editPassword'),
   array('confirmPassword','hashPassword','on'=>'register,editPassword'),
}
public function hashPassword($attribute,$params)
{
   return md5($this->$attribute)
}
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение slavcodev »

egorio писал(а):Мне кажется, делать что-то с паролем в beforeValidate некорректно, т. к. станет невозможно проверить например array('password', 'length', ...) или array('password', 'match', ...).

Так же нет никакого смысла хешировать confirmPassword - лишняя нагрузка. Сравнить их можно и в сыром виде, а вот захешировать пароль можно либо в afterValidate... а лучше даже beforeSave который вызовется в последний момент.
Согласен. Это были мысли в слух ) Обсуждались именно использование фильтров для хеша пароля. Если в методе rules выставить правила в нужно поряке (проверка длину, сложность, сравнить с поврежденным) то можно и хеш в последнем правиле вычислить.
Жду Yii 3!
kostyan
Сообщения: 66
Зарегистрирован: 2011.08.23, 11:46

Re: RBAC и описание ролей в файле

Сообщение kostyan »

Подскажите чем плох вариант хранить роли в сессии, что б не было постоянного лишнего запроса к базе? не могу найти обсуждения этого варианта…

Спасибо.
Byka
Сообщения: 3
Зарегистрирован: 2012.08.12, 02:58

Re: RBAC и описание ролей в файле

Сообщение Byka »

Здравствуйте. На форуме уже спрашивали как выглядит в auth.php определение задач и операций

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

'showPage' => array('type'=>CAuthItem::TYPE_OPERATION, 'description'=>'Просмотр страницы'),
Я делаю следующим образом:
auth.php

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

...
'administrator' => array(
        'type' => CAuthItem::TYPE_ROLE,
        'description' => 'Administrator',
        'children' => array(
            'moderator',         // позволим админу всё, что позволено модератору
            'deleteComments'=>array(
            'type'=>CAuthItem::TYPE_ROLE,
            'description'=>'Del comments',
            ),
        ),
....
Когда пытаюсь применить

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

if(Yii::app()->user->checkAccess('deleteComments')) { ... }
Возникает ошибка Illegal offset type in isset or empty
Я правильно прописываю в auth.php?
И второй вопрос: у меня отображается список постов, я хочу что бы возможно было редактировать только собственные посты. В мануале говорится

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

$bizRule='return Yii::app()->user->id==$params["post"]->authID;';
$task=$auth->createTask('updateOwnPost','редактирование своей записи',$bizRule);
Предполагаю, что в случае прописывания это выглядит так? (Если в предыдущем вопросе правильно прописываю)

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

'administrator' => array(
        'type' => CAuthItem::TYPE_ROLE,
        'description' => 'Administrator',
        'children' => array(
            'moderator',         // позволим админу всё, что позволено модератору
            'changeOwnPosts'=>array(
            'type'=>CAuthItem::TYPE_ROLE,
            'description'=>change posts',
            'bizRule'=> Yii::app()->user->id==$params["post"]->author_id,
            ),
        ),
а в контроллере

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

Yii::app()->user->checkAccess('changeOwnPosts', array('user'=>$model))
Так примерно?
Я этот вопрос решил иначе
В моделе Post

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

public function search()
    {
        $criteria=new CDbCriteria;

        $criteria->compare('title',$this->title,true);

        $criteria->compare('status',$this->status);
        
        $criteria->compare('category_id',$this->category_id);
        [b]$criteria->addCondition('author_id=:author_id');
        $criteria->params=array(':author_id'=>Yii::app()->user->id);[/b]
        return new CActiveDataProvider('Post', array(
            'criteria'=>$criteria,
            'sort'=>array(
                'defaultOrder'=>'status, update_time DESC',
            ),
        ));
    }
Работает, но при попытке применить фильтрацию данных в admin (название, черновик/опубликованное...) Ajax высвечивает ошибку
Error 500: <h1>CDbException</h1>
<p>CDbCommand failed to execute the SQL statement:...
Я так понимаю, что запрос пытается отфильтровать все записи а стоит ограничение на записи зашедшего юзера?
Как мне правильно выполнить редактирование записей только их владельцами?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

Нет. Неправильно. Вложенные описания не поддерживаются. В 'children' указываются только названия.
Ответить