napeHeK
(Napehek)
March 4, 2010, 3:32pm
1
Код работает отлично
if(Yii::app()->user->checkAccess('updateProfile', $user['id']))
{
//Тут что-то
}
Как в методе Rules передать params?
public function accessRules()
{
return array(
array('allow',
'actions' => array('edit'),
'roles' => array('updateProfile'),
),
array('deny',
'actions' => array('edit'),
'users'=>array('*'),
),
);
}
Это контроллер профиля пользователя…право редактировать дается админу и пользователю профиля…
'updateProfile' => array(
'type' => 0,
'description' => 'Редактирование профиля',
'bizRule' => NULL,
'data' => NULL,
),
'updateMyProfile' => array(
'type' => 1,
'description' => 'редактирование своего профиля',
'bizRule' => 'return Yii::app()->user->id == $params;',
'data' => NULL,
'children' => array(
0 => 'updateProfile',
),
),
'administrator' => array(
'type' => 2,
'description' => 'Администратор',
'bizRule' => NULL,
'data' => NULL,
'children' => array(
'moderator',
'updateProfile',
),
),
Как передать параметр в фильтре или может я пошел неправильным путем…?
creocoder
(Creocoder)
March 5, 2010, 7:04am
2
В качестве второго параметра в checkAccess() передается массив. У вас вместо этого
А нужно
Также необходимо переделать bizRule следующим образом:
napeHeK
(Napehek)
March 5, 2010, 8:30am
3
Та блин…я не об этом спрашивал…и вы не правы! Мне нужно передавать один параметр…зачем передавать массив? Yii все равно…
Yii::app()->user->checkAccess('updateProfile', $user['id'])
'bizRule' => 'return Yii::app()->user->id == $params;'
Код нормально работает. А я леньтяй, пусть это немного нарушает логику…просто писать меньше.
Как в методе accessRules() передать параметр…?
napeHeK
(Napehek)
March 5, 2010, 8:38am
4
creocoder
(Creocoder)
March 13, 2010, 11:57pm
5
to napeHeK
Ещё раз перечитайте пост. Попробуйте сделать, потом утверждайте, что
Чтобы понять что нужно передавать именно массив, посмотрите реализацию любого из AuthManager.
Вот Yii не всеравно, а вам я бы порекомендовал прочитать хотябы раздел документации по RBAC, чтобы увидеть что передается массив даже в элементарном случае. Вот так
'bizRule' => 'return Yii::app()->user->id == $params;'
не делают! Как делают я вам написал, смотрите в документации, если сомневаетесь. Потом когда нужно будет передать 10 параметров в checkAccess при сложнейшей иерархии, таких вопросов уже возникать не будет.
Никак. CAccessFilter работает только для простейших случаев авторизации. Для более сложных используются непосредственные проверки в действиях.
napeHeK
(Napehek)
March 14, 2010, 10:52pm
6
Ладно, гляну реализацию…но…
Мы передаем переменную и если это массив, обращаемся как массив, если обычную переменную, то используем как переменную…
Блин это логика…я посмотрю обязательно