ACL Extension  0.3
 All Data Structures Namespaces Files Functions Variables
ExtAccessControlFilter.php
Go to the documentation of this file.
1 <?php
2 
11 class ExtAccessControlFilter extends CAccessControlFilter{
12 
16  public function setRules($rules) {
17  foreach ($rules as $rule) {
18  if (is_array($rule) && isset($rule[0])) {
19  $r = new ExtAccessRule;
20  $r->allow = $rule[0] === 'allow';
21  foreach (array_slice($rule, 1) as $name => $value) {
22  if ($name === 'expression' || $name === 'roles' || $name === 'message')
23  $r->$name = $value;
24  else
25  $r->$name = array_map('strtolower', $value);
26  }
27  $this->_rules[] = $r;
28  }
29  }
30  }
31 }
32 
33 class ExtAccessRule extends CAccessRule{
38  protected function isRoleMatched($user) {
39  if (empty($this->roles))
40  return true;
41 
42  //retrieve Collection
43  $class = Strategy::getClass('Aro');
44  $aro = $class::model()->find('foreign_key = :id AND model = :model',
45  array(':id' => $user->id, ':model' => RestrictedActiveRecord::$model)
46  );
47 
48  if(!$aro)
49  return false;
50 
51  foreach ($this->roles as $role) {
52  if($aro->is($role))
53  return true;
54  }
55  return false;
56  }
57 }
58 ?>