RBAC (Rol Tabanlı Erişim Kontrolü) içinde BizRules fikri beni hasta hissettiriyor. Bu temelde yetkilendirme sırasında veri karşı çalıştırmak için bir komut dosyası tanımlamak için bir yoldur.
Örneğin, Yii çerçeve onu destekleyen: http://www.yiiframework.com/doc/api/1.1/CAuthManager#createRole-detail
public CAuthItem createRole(string $name, string $description='', string $bizRule=NULL, mixed $data=NULL)
Burada bir iş kuralı yürütme için kaynak kodu:
/**
* 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);
}
Yani, sizin gibi şeyler yapabilirsiniz:
// Assume this bizRule: $bizRule='return Yii::app()->user->id==$params["post"]->authID;';
Yii::app()->user->checkAccess('createUser', array('post' => $post));
Temelde BizRule kendi bağlamında verilen dizi seti $ params sahip evals.
Ben güvenlik açısından bu iş kuralları sevmiyorum. Bunu yapmanın iyi bir yolu var mı?