2010-12-11 5 views
2

L'idée de BizRules dans RBAC (Role Based Access Control) me rend malade. C'est fondamentalement un moyen de définir un script à exécuter sur des données pendant l'autorisation.Les BizRules (règles métier) dans RBAC sont-ils vraiment sûrs?

Par exemple, le cadre Yii gère: http://www.yiiframework.com/doc/api/1.1/CAuthManager#createRole-detail

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

Voici le code source pour exécuter une règle commerciale:

/** 
    * 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); 
    } 

Ainsi, vous pouvez faire des choses comme:

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

Il évalue fondamentalement le biz Règle ayant le $ params défini sur le tableau donné dans son contexte. Je n'aime pas ces règles métier en termes de sécurité. Y a-t-il une meilleure façon de le faire?

+0

Pourquoi ne pas demander ce sur le [SecuritySE] (http://security.stackexchange.com/)? – AviD

+0

En fait, vérifiez cette [question légèrement liée] (http://security.stackexchange.com/q/346/33). – AviD

Répondre

2

Peut-être que cela aidera quelqu'un, si vous avez php 5.3 Je pense que vous pouvez utiliser LambdaFunctions

$bizRule = function ($param) { return $param[1] = $param[2]}; 
Questions connexes