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设置为给定数组的bizRule。
我不喜欢那些安全方面的业务规则。有没有更好的方法呢?
答案 0 :(得分:2)
也许它会帮助某人,如果你有php 5.3我认为你可以使用LambdaFunctions
$bizRule = function ($param) { return $param[1] = $param[2]};