public function removeDeny($roles, $resources = null, $permissions = null)
{
if (!is_array($roles)) {
$roles = array($roles);
}
// Check if the roles has been added
foreach ($roles as $role) {
if (!isset($this->roles[$role])) {
throw new Exception('Error: That role has not been added.');
}
if (!isset($this->denied[$role])) {
throw new Exception('Error: That role has no allow rules associated with it.');
}
// Check if the resource(s) have been added
if (null !== $resources) {
if (!is_array($resources)) {
$resources = array($resources);
}
foreach ($resources as $resource) {
if (!isset($this->resources[$resource])) {
$this->addResource($resource);
}
if (isset($this->denied[$role][$resource])) {
if (null != $permissions) {
if (!is_array($permissions)) {
$permissions = array($permissions);
}
foreach ($permissions as $permission) {
if (in_array($permission, $this->denied[$role][$resource])) {
$key = array_search($permission, $this->denied[$role][$resource]);
unset($this->denied[$role][$resource][$key]);
}
}
} else {
unset($this->denied[$role][$resource]);
}
}
}
} else {
unset($this->denied[$role]);
}
}
return $this;
}