BizRules (бизнес-правила) в RBAC действительно безопасны? - PullRequest
2 голосов
/ 11 декабря 2010

Идея BizRules в RBAC (Role Based Access Control) заставляет меня чувствовать себя плохо. Это в основном способ определения скрипта для запуска данных во время авторизации.

Например, Yii Framework поддерживает это: http://www.yiiframework.com/doc/api/1.1/CAuthManager#createRole-detail

public CAuthItem createRole(string $name, string $description='', string $bizRule=NULL, mixed $data=NULL)

Вот исходный код для выполнения бизнес-правила:

    /**
     * Executes the specified business rule.
     * @param string $bizRule the business rule to be executed.
     * @param array $params parameters passed to {@link IAuthManager::checkAccess}.
     * @param mixed $data additional data associated with the authorization item or assignment.
     * @return boolean whether the business rule returns true.
     * If the business rule is empty, it will still return true.
     */
    public function executeBizRule($bizRule,$params,$data)
    {
            return $bizRule==='' || $bizRule===null || ($this->showErrors ? eval($bizRule)!=0 : @eval($bizRule)!=0);
    }

Итак, вы можете делать такие вещи, как:

    // Assume this bizRule: $bizRule='return Yii::app()->user->id==$params["post"]->authID;';
    Yii::app()->user->checkAccess('createUser', array('post' => $post));

Он в основном убирает bizRule, у которого $ params установлен в данный массив в его контексте.

Мне не нравятся эти бизнес-правила с точки зрения безопасности. Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 11 февраля 2011

Может быть, это кому-нибудь поможет, если у вас php 5.3, думаю, вы можете использовать LambdaFunctions

$bizRule = function ($param) { return $param[1] = $param[2]};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...