Yii Framework Forum: RBAC роли - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

RBAC роли Rate Topic: -----

#1 User is offline   corpix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 22-May 09
  • Location:Moscow

Posted 22 May 2009 - 09:41 PM

Всем привет!)
Пару дней назад свалил с ZendFramework на Yii, ожидая прирост производительности.
То, что хотел я получил...но как и всегда...возникает много вопросов.
С английским у меня не очень.
Очень нужная дока про роли..ещё не до конца переведена((
http://www.yiiframew.../ru/topics.auth

При попытки расписать роли для задач и опираций возникает такая вот ошибка:
"CDbCommand failed to execute the SQL statement: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "authitem" does not exist"

Код из доки:

$auth=Yii::app()->authManager;

$auth->createOperation('createPost','create a post');
$auth->createOperation('readPost','read a post');
$auth->createOperation('updatePost','update a post');
$auth->createOperation('deletePost','delete a post');

$bizRule='return Yii::app()->user->id==$params["post"]->authID;';
$task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule);
$task->addChild('updatePost');

$role=$auth->createRole('reader');
$role->addChild('readPost');

$role=$auth->createRole('author');
$role->addChild('reader');
$role->addChild('createPost');
$role->addChild('updateOwnPost');

$role=$auth->createRole('editor');
$role->addChild('reader');
$role->addChild('updatePost');

$role=$auth->createRole('admin');
$role->addChild('editor');
$role->addChild('author');
$role->addChild('deletePost');

$auth->assign('reader','readerA');
$auth->assign('author','authorB');
$auth->assign('editor','editorC');
$auth->assign('admin','adminD');


В конфиге стоит

'authManager' => array(
'class' => 'CDbAuthManager',
'connectionID' => 'db',
),


Посмотрел код фреймворка в местах вызова функций, где возникает ошибка...
Ну зачем ему писать эти данные в бд?При каждом выполнении писать будем?
Очень интересно...
Помогите найти решение...если реально хранить все роли и права в БД...то это только лучше...я на зенде их так и хранил...

Заранее спасибо. :)
0

#2 User is offline   corpix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 22-May 09
  • Location:Moscow

Posted 23 May 2009 - 07:06 AM

Не верю, что из 10ти просмотревших топик никто не знает решения =)
0

#3 User is offline   ppy 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 21-May 09

Posted 23 May 2009 - 10:01 AM

у тебя в базе таблицы не созданы для CDbAuthManager.
конкретно ошибка тебе говорит, что у тебя в базе нет таблицы authitem

Тебе нужно прочитать http://www.yiiframew.../CDbAuthManager

и выполнить в базе вот этот код framework/web/auth/schema.sql


0

#4 User is offline   corpix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 22-May 09
  • Location:Moscow

Posted 23 May 2009 - 03:53 PM

Quote

у тебя в базе таблицы не созданы для CDbAuthManager.

конкретно ошибка тебе говорит, что у тебя в базе нет таблицы authitem



Тебе нужно прочитать http://www.yiiframew.../CDbAuthManager



и выполнить в базе вот этот код framework/web/auth/schema.sql

И всёже..не пойму..зачем база, если я статично всё хочу прописать)
Ща попробую, спасибо за ответ =)
0

#5 User is offline   corpix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 22-May 09
  • Location:Moscow

Posted 23 May 2009 - 08:16 PM

Тоесть, как я понимаю, код, который у меня не работал использовался для записи данных о ролях и т.п. в БД, для того, чтобы в дальнейшем просто проверять всё это при помощи Yii::app()->user->checkAccess()?Я верно всё понял?
0

#6 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 23 May 2009 - 08:19 PM

Quote

Quote

у тебя в базе таблицы не созданы для CDbAuthManager.

конкретно ошибка тебе говорит, что у тебя в базе нет таблицы authitem



Тебе нужно прочитать http://www.yiiframew.../CDbAuthManager



и выполнить в базе вот этот код framework/web/auth/schema.sql


И всёже..не пойму..зачем база, если я статично всё хочу прописать)

Ща попробую, спасибо за ответ =)


Понимаешь если БД ты не хочеш использовать - надо к классу CPhpAuthManager обращятся в конфиге а не к CDbAuthManager. т.к. ты вызываешь класс который заточен под работу с БД - то оно и требует таблицу для себя
0

#7 User is offline   corpix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 22-May 09
  • Location:Moscow

Posted 03 June 2009 - 10:25 AM

Quote

link=topic=2285.msg12726#msg12726 date=1243127951]

Quote

Quote

у тебя в базе таблицы не созданы для CDbAuthManager.

конкретно ошибка тебе говорит, что у тебя в базе нет таблицы authitem



Тебе нужно прочитать http://www.yiiframew.../CDbAuthManager



и выполнить в базе вот этот код framework/web/auth/schema.sql


И всёже..не пойму..зачем база, если я статично всё хочу прописать)

Ща попробую, спасибо за ответ =)




Понимаешь если БД ты не хочеш использовать - надо к классу CPhpAuthManager обращятся в конфиге а не к CDbAuthManager. т.к. ты вызываешь класс который заточен под работу с БД - то оно и требует таблицу для себя


Ясненько)...прошу прощения за свои тупки))))
0

#8 User is offline   aka_SKIff 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 05-June 09

Posted 05 June 2009 - 12:10 AM

А я вот что-то не уловил, в каком месте этот код должен исполняться? Судя по всему, он может исполняться только один раз.
И еще вопрос. В коде, приведенном выше, роли назначаются вот таким макаром:
$auth->assign('reader','readerA');
$auth->assign('author','authorB');
$auth->assign('editor','editorC');
$auth->assign('admin','adminD');


То есть, по сути, каждому пользователю персонально.
А как можно реализовать разделение ролей просто с использованием дополнительного поля в модели пользователя?
0

#9 User is offline   KJedi 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 381
  • Joined: 19-October 08
  • Location:Nikolaev, Ukraine (Europe)

Posted 05 June 2009 - 02:51 AM

1) Действительно, только один раз. Но это пример из доки. Вообще-то ты должен сделать админку, в которой подобные строчки будыт выпоняться когда юзер выбрал пользователя и выбрал роль.
2) Нельзя, раве что ты сам напишешь такой вариант для RBAC. Посмотри код класса CDbAuthManager, может это и реально

0

#10 User is offline   aka_SKIff 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 05-June 09

Posted 05 June 2009 - 04:03 AM

Да, я уже понял, что придется адаптировать исходники базовых классов.
С вызовом assign разобрался.
Но это с БД. А как быть если ПХП-скрипт? В доках написано, что скрипт должен лежать в protected/data/auth.php. А что должно быть в скрипте?
0

#11 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 01 July 2009 - 08:21 AM

Quote

2) Нельзя, раве что ты сам напишешь такой вариант для RBAC. Посмотри код класса CDbAuthManager, может это и реально


а почему нельзя??? а думаю что можно добавить аттрибут role, для пользователя, который будет содержать одну из ролей,созданную authManager-ом а потом переопределить метод getId у CWebUser - что бы он возвращал эту роль - это делается так как в методе checkAccess у CWebUser, используется именно getId()!

Кто-нибудь пробывал так поступать?? Какие возникали проблемы??
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users