diff --git a/wire/core/User.php b/wire/core/User.php index 6f2072aa..3badc1c7 100644 --- a/wire/core/User.php +++ b/wire/core/User.php @@ -43,16 +43,33 @@ public function __construct(Template $tpl = null) { * */ public function hasRole($role) { - - $roles = $this->get('roles'); - $has = false; - - if(empty($roles)) { - // do nothing - - } else if(is_object($role) && $role instanceof Page) { - $has = $roles->has($role); - + + $roles = $this->get('roles'); + $has = false; + + if(empty($roles)) { + // do nothing + + } else if(is_object($role) && $role instanceof Page) { + $has = $roles->has($role); + + } else if(is_object($role) && $role instanceof PageArray) { + foreach ($role as $page) { + if ($this->hasRole($page)) { + $has = true; + break; + } + } + + } else if(strpos($role, '|') !== false) { + $multiroles = explode('|', $role); + foreach ($multiroles as $singlerole) { + if ($this->hasRole($singlerole)) { + $has = true; + break; + } + } + } else if(ctype_digit("$role")) { $role = (int) $role; foreach($roles as $r) { @@ -63,7 +80,7 @@ public function hasRole($role) { } } else if(is_string($role)) { - foreach($roles as $r) { + foreach($roles as $r) { if($r->name === $role) { $has = true; break;