Как сделать, чтобы юзер мог управлять только своими данными?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
andriyko
Сообщения: 5
Зарегистрирован: 2013.08.18, 08:01
Откуда: Украина
Контактная информация:

Как сделать, чтобы юзер мог управлять только своими данными?

Сообщение andriyko »

Здравствуйте!

Совсем недавно начал изучать Yii, до этого было немножко php и drupal. В процессе изучения возник вопрос по поводу как сделать, чтобы каждый залогиненный пользователь мог видеть/редактировать/удалять только свои данные.

Вкратце о том что есть в проекте.

1) Установлен модуль для управления пользователями Yii-user

2) В БД создана таблица Clients: каждый пользователь программы может вести свой список клиентов. Другие пользователи, естественно, не должны иметь к нему доступа.

3) Посредством gii сгенерирована модель Clients и соответствующие представления (views).

В процессе чтения материалов по теме вычитал, что наиболее безопасным способом реализации будет создание scope в ClientsController наподобии:

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

public function scopes()
{
return array(
  'own'=>array(
    'condition'=>'userid=' . Yii::app()->user->id,
  ),
);
}
Теперь неясно, что дальше? Как переписать дефолтные действия контроллера index, view, update, delete с учётом scope

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

Clients::model()->own()->findAll();
Интересует мнение экспертов по теме. Возможно есть другие варианты реализации данной задачи? Чувствую, что вопрос несложный, однако готового рецепта в сети найти не удалось.

Буду очень благодарен за подсказки.
sashaYY
Сообщения: 42
Зарегистрирован: 2013.01.31, 23:25
Откуда: Краснодар
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение sashaYY »

Красавчик)). ТС с этим уж точно разберется.
sashaYY
Сообщения: 42
Зарегистрирован: 2013.01.31, 23:25
Откуда: Краснодар
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение sashaYY »

andriyko писал(а): В процессе чтения материалов по теме вычитал, что наиболее безопасным способом реализации будет создание scope в ClientsController наподобии:

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

public function scopes()
{
return array(
  'own'=>array(
    'condition'=>'userid=' . Yii::app()->user->id,
  ),
);
} 
Ну наверное в ClientsController лучше этого не делать, а сделать в Clients.

Тогда уж лучше

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

public function defaultScope()
{
return array(
    'condition'=>$this->getTableAlias(false,false).'.userid=' . Yii::app()->user->id
);
} 
Но, проблемы в данном подходе тоже есть, но зато нестрашно можно делать выборку, т.к сразу видно косяк.
Аватара пользователя
andriyko
Сообщения: 5
Зарегистрирован: 2013.08.18, 08:01
Откуда: Украина
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение andriyko »

yiijeka писал(а):http://habrahabr.ru/post/177873/
За ссылку спасибо! Вот где понятно и подробно описано.
Мануал читал. «Вроде тоже самое что в мануале, но намного понятней. Самая большая проблема официальных мануалов по Yii, это ты их читаешь, все вроде ясно, а потом читаешь снова, потому что, в итоге, не фига не ясно» ©habrahabr
Последний раз редактировалось andriyko 2013.08.29, 09:00, всего редактировалось 2 раза.
Аватара пользователя
andriyko
Сообщения: 5
Зарегистрирован: 2013.08.18, 08:01
Откуда: Украина
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение andriyko »

sashaYY писал(а):Ну наверное в ClientsController лучше этого не делать, а сделать в Clients.
В приложении будут еще с десяток подобных таблиц. И что лучше порекомендуете, выстраивать иерархию ролей RBAC или просто обойтись scopes?
sashaYY
Сообщения: 42
Зарегистрирован: 2013.01.31, 23:25
Откуда: Краснодар
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение sashaYY »

andriyko писал(а):
sashaYY писал(а):Ну наверное в ClientsController лучше этого не делать, а сделать в Clients.
В приложении будут еще с десяток подобных таблиц. И что лучше порекомендуете, выстраивать иерархию ролей RBAC или просто обойтись scopes?
Ну в цитате, я как-бы говорю, о том, что scopes должен быть в модели, а не контролере. Может вы просто опечаталсиь.

Лучше RBAC использовать сразу, т.к все может поменяться и им на порядок проще рулить бизнес задачами.
А scopes могут понадобится при использовании RBAC, но тут главное не переусердствовать и понимать разницу применения scope и RBAC, т.кscope относится больше к модели данных, а RBAC и бизнес процессам(правам)
Аватара пользователя
andriyko
Сообщения: 5
Зарегистрирован: 2013.08.18, 08:01
Откуда: Украина
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение andriyko »

sashaYY писал(а):Лучше RBAC использовать сразу, т.к все может поменяться и им на порядок проще рулить бизнес задачами.
А scopes могут понадобится при использовании RBAC, но тут главное не переусердствовать и понимать разницу применения scope и RBAC, т.кscope относится больше к модели данных, а RBAC и бизнес процессам(правам)
Насколько я понял, роли RBAC пишутся для конкретного контроллера. Если в моём приложении будет десяток контроллеров для различных задач, то получается, что для каждого нужно писать свои роли?
sashaYY
Сообщения: 42
Зарегистрирован: 2013.01.31, 23:25
Откуда: Краснодар
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение sashaYY »

andriyko писал(а):
sashaYY писал(а):Лучше RBAC использовать сразу, т.к все может поменяться и им на порядок проще рулить бизнес задачами.
А scopes могут понадобится при использовании RBAC, но тут главное не переусердствовать и понимать разницу применения scope и RBAC, т.кscope относится больше к модели данных, а RBAC и бизнес процессам(правам)
Насколько я понял, роли RBAC пишутся для конкретного контроллера. Если в моём приложении будет десяток контроллеров для различных задач, то получается, что для каждого нужно писать свои роли?
Мой опыт:

Нет, операции, пишутся под дествие CRUD обычно, их можно расширить.

Хоть создание под каждое действие CRUD операции и кажется долгим, это все наговоры)). В чем плюс: потом создавать роли и (задачи) и операций, и их комбинацию, как только хочется.

Пример (словесный - код не дам):
Разрешение комментирования сообщений только автозованным юзерам:
Как составляем правила, операции:
1). Пользователь не гость. + права на создание коммента
2) Все))))

P.P.S Наследование и полимофизм тоже никто вроде не отменял.

Все приходит с оптом!!
Аватара пользователя
andriyko
Сообщения: 5
Зарегистрирован: 2013.08.18, 08:01
Откуда: Украина
Контактная информация:

Re: Как сделать, чтобы юзер мог управлять только своими данн

Сообщение andriyko »

Большое спасибо всем за ответы! Есть над чем поразмышлять :)
Ответить