<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Permissions\Rbac;
use RecursiveIteratorIterator;
abstract class AbstractRole extends AbstractIterator implements RoleInterface
{
/**
* @var null|RoleInterface
*/
protected $parent;
/**
* @var string
*/
protected $name;
/**
* @var array
*/
protected $permissions = array();
/**
* Get the name of the role.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Add permission to the role.
*
* @param $name
* @return RoleInterface
*/
public function addPermission($name)
{
$this->permissions[$name] = true;
return $this;
}
/**
* Checks if a permission exists for this role or any child roles.
*
* @param string $name
* @return bool
*/
public function hasPermission($name)
{
if (isset($this->permissions[$name])) {
return true;
}
$it = new RecursiveIteratorIterator($this, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($it as $leaf) {
/** @var RoleInterface $leaf */
if ($leaf->hasPermission($name)) {
return true;
}
}
return false;
}
/**
* Add a child.
*
* @param RoleInterface|string $child
* @return Role
*/
public function addChild($child)
{
if (is_string($child)) {
$child = new Role($child);
}
if (!$child instanceof RoleInterface) {
throw new Exception\InvalidArgumentException(
'Child must be a string or implement Zend\Permissions\Rbac\RoleInterface'
);
}
$child->setParent($this);
$this->children[] = $child;
return $this;
}
/**
* @param RoleInterface $parent
* @return RoleInterface
*/
public function setParent($parent)
{
$this->parent = $parent;
return $this;
}
/**
* @return null|RoleInterface
*/
public function getParent()
{
return $this->parent;
}
}
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
|
|