Currently all rules(users, roles, …) are treated as arrays except expression rule. This is in conflict with setRules function that expects rule to be an array.
So I propose to use expression as an array in code and in function isExpressionMatched:
protected function isExpressionMatched($user)
{
if($this->expression===null)
return true;
foreach($this->expression as $rule)
if(@eval('return '.$rule.';'))
return true;
}