2010-12-11 8 views
2

RBAC(Role Based Access Control)のBizRulesのアイデアは気分が悪くなります。これは、基本的に、承認中にデータに対して実行するスクリプトを定義する方法です。例えばRBACのBizRules(ビジネスルール)は本当に安全ですか?

、Yiiのフレームワークは、それをサポートしています。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)); 

基本的には、コンテキスト内の指定された配列に$ paramsを設定したルール。

セキュリティ上のビジネスルールが嫌いです。それを行う良い方法はありますか?

+0

を使用することができると思い、誰かを助けますか? – AviD

+0

実際にこの[少し関連する質問](http://security.stackexchange.com/q/346/33)をチェックしてください。 – AviD

答えて

2

多分それはあなたがPHP 5.3を持っている場合、私は[SecuritySE](http://security.stackexchange.com/)でこれを超える聞かないのはなぜあなたはLambdaFunctions

$bizRule = function ($param) { return $param[1] = $param[2]}; 
関連する問題