Управление правилами

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
CCCZen
Сообщения: 21
Зарегистрирован: 2018.04.01, 15:41

Управление правилами

Сообщение CCCZen » 2019.07.25, 13:36

Поставил dektrium rbac

написал правило

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

class isAdmin extends Rule {
	public $name = 'isAdmin';
	
	public function execute( $user, $item, $params ) {
		return true;
	}
}
создал роль админ которой дал это правило
Изображение
Изображение

во вью

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

 <?var_dump(Yii::$app->user->can( 'isAdmin'));?>
    <?var_dump(Yii::$app->user->can( 'AdminRole'));?>
	<?php var_dump(Yii::$app->authManager->checkAccess(8,'isAdmin'))?>
    <pre>
    <?php var_dump(Yii::$app->getAuthManager()->getRolesByUser(8))?>
    <?php var_dump(Yii::$app->getAuthManager()->getPermissionsByUser(8))?>
    <?php var_dump(Yii::$app->getAuthManager()->getRule('isAdmin'))?>
    </pre>
    
дает резуьтат
Изображение


т.е. при can() на группу дает результат, а при вызове правила дает false.

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

CCCZen
Сообщения: 21
Зарегистрирован: 2018.04.01, 15:41

Re: Управление правилами

Сообщение CCCZen » 2019.07.25, 14:27

И такой вопрос: зачем нужно поле правило в Ролях?
Я так понял оно не проверяется ни в каком случае кроме вызова

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

Yii::$app->user->can( 'ROLE_NAME')

Аватара пользователя
Chelobaka
Сообщения: 203
Зарегистрирован: 2018.06.01, 09:54

Re: Управление правилами

Сообщение Chelobaka » 2019.09.16, 14:00

Yii::$app->user->can - проверяте ROLE, RULES

То что добавили вы в БД и не должно работать. Потому что сделанное вами разрешение нужно привязать к правилу.
Вы добавили запись в БД вручную, а за работу данного разрешения отвечают 2 записи в 2х таблицах.


Если вы хотите добавить правило которое скажем будет при редактировании страница сайта проверять :
1. Есть ли у пользователя права редактировать страницу? ПРАВИЛЬ
2. Если пользователь не админ, то его ли это страница? РАЗРЕШЕНИЕ
То смотрите ниже.

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

class AuthorRule extends Rule
{
    public $name = 'isAuthor';

    /**
     * @param string|int $user the user ID.
     * @param Item $item the role or permission that this rule is associated width.
     * @param array $params parameters passed to ManagerInterface::checkAccess().
     * @return bool a value indicating whether the rule permits the role or permission it is associated with.
     */
    public function execute($user, $item, $params)
    {
        return isset($params['post']) ? $params['post']->createdBy == $user : false;
    }
}

/**/

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

// add the rule
$rule = new \app\rbac\AuthorRule;
$auth->add($rule);

 // добавляем разрешение "updatePost"
$updatePost = $auth->createPermission('updatePost');
$updatePost->description = 'Update post';
$auth->add($updatePost);
        
// добавляем разрешение "updateOwnPost" и привязываем к нему правило.
$updateOwnPost = $auth->createPermission('updateOwnPost');
$updateOwnPost->description = 'Update own post';
$updateOwnPost->ruleName = $rule->name;
$auth->add($updateOwnPost);

// "updateOwnPost" будет использоваться из "updatePost"
$auth->addChild($updateOwnPost, $updatePost);

// разрешаем "автору" обновлять его посты
$auth->addChild($author, $updateOwnPost);

Практически ваш случай: https://yiiframework.com.ua/ru/doc/guid ... orization/

Аватара пользователя
maleks
Сообщения: 1796
Зарегистрирован: 2012.12.26, 12:56

Re: Управление правилами

Сообщение maleks » 2019.09.17, 06:23

CCCZen , вы неверно поняли RBAC

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

var_dump(Yii::$app->user->can( 'isAdmin'));
Так не верно.
Проверяются у пользователя роли и разрешения.
Из них состоит иерархия.
А правилами уже дополнительные проверки на принадлежность роли/разрешения. Ваше правило ничего не проверяет, поэтому в нем нет смысла.

Ответить