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; }