public function isAllowed($key, $type = "permission")
{
if ($this->isAdmin()) {
return true;
}
if ($type == "permission") {
if (!$this->getPermission($key)) {
// check roles
foreach ($this->getRoles() as $roleId) {
$role = User\Role::getById($roleId);
if ($role->getPermission($key)) {
return true;
}
}
}
return $this->getPermission($key);
} elseif ($type == "class") {
$classes = $this->getClasses();
foreach ($this->getRoles() as $roleId) {
$role = User\Role::getById($roleId);
$classes = array_merge($classes, $role->getClasses());
}
if (!empty($classes)) {
return in_array($key, $classes);
} else {
return true;
}
} elseif ($type == "docType") {
$docTypes = $this->getDocTypes();
foreach ($this->getRoles() as $roleId) {
$role = User\Role::getById($roleId);
$docTypes = array_merge($docTypes, $role->getDocTypes());
}
if (!empty($docTypes)) {
return in_array($key, $docTypes);
} else {
return true;
}
} elseif ($type == "perspective") {
//returns true if required perspective is allowed to use by the user
return in_array($key, $this->getMergedPerspectives());
}
return false;
}