Public Member Functions | |
ilRbacReview () | |
Constructor public. | |
roleExists ($a_title, $a_id=0) | |
Checks if a role already exists. | |
getParentRoles ($a_path, $a_templates=false) | |
Get parent roles in a path. | |
getParentRoleIds ($a_endnode_id, $a_templates=false) | |
get an array of parent role ids of all parent roles, if last parameter is set true you get also all parent templates private | |
getRoleListByObject ($a_ref_id, $a_templates=false) | |
Returns a list of roles in an container public. | |
getAssignableRoles ($a_templates=false, $a_internal_roles=false) | |
Returns a list of all assignable roles public. | |
getAssignableChildRoles ($a_ref_id) | |
Get all assignable roles under a specific node public. | |
setTemplateFilter ($a_templates) | |
get roles and templates or only roles; returns string for where clause private | |
setRoleType ($a_role_list) | |
computes role type in role list array: global: roles in ROLE_FOLDER_ID local: assignable roles in other role folders linked: roles with stoppped inheritance template: role templates | |
assignedUsers ($a_rol_id, $a_fields=NULL) | |
get all assigned users to a given role public | |
isAssigned ($a_usr_id, $a_role_id) | |
check if a specific user is assigned to specific role public | |
assignedRoles ($a_usr_id) | |
get all assigned roles to a given user public | |
isAssignable ($a_rol_id, $a_ref_id) | |
Check if its possible to assign users public. | |
getFoldersAssignedToRole ($a_rol_id, $a_assignable=false) | |
returns an array of role folder ids assigned to a role. | |
getRolesOfRoleFolder ($a_ref_id, $a_nonassignable=true) | |
get all roles of a role folder including linked local roles that are created due to stopped inheritance returns an array with role ids public | |
getGlobalRoles () | |
get only 'global' roles public | |
getGlobalRolesArray () | |
get only 'global' roles public | |
getGlobalAssignableRoles () | |
get only 'global' roles (with flag 'assign_users') public | |
getAllRoleFolderIds () | |
get all role folder ids public | |
getRoleFolderOfObject ($a_ref_id) | |
returns the data of a role folder assigned to an object public | |
getOperationsOfRole ($a_rol_id, $a_type, $a_parent=0) | |
get all possible operations of a specific role The ref_id of the role folder (parent object) is necessary to distinguish local roles public | |
getRoleOperationsOnObject ($a_role_id, $a_ref_id) | |
getOperationsOnType ($a_typ_id) | |
all possible operations of a type public | |
getObjectsWithStopedInheritance ($a_rol_id) | |
get all objects in which the inheritance of role with role_id was stopped the function returns all reference ids of objects containing a role folder. | |
isDeleted ($a_node_id) | |
checks if a rolefolder is set as deleted (negative tree_id) public | |
getRolesByFilter ($a_filter=0, $a_user_id=0) | |
Data Fields | |
$log = null |
Definition at line 38 of file class.ilRbacReview.php.
ilRbacReview::assignedRoles | ( | $ | a_usr_id | ) |
get all assigned roles to a given user public
integer | usr_id |
Definition at line 406 of file class.ilRbacReview.php.
Referenced by getRolesByFilter().
{ if (!isset($a_usr_id)) { $message = get_class($this)."::assignedRoles(): No user_id given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $role_arr = array(); $q = "SELECT rol_id FROM rbac_ua WHERE usr_id = '".$a_usr_id."'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $role_arr[] = $row->rol_id; } if (!count($role_arr)) { $message = get_class($this)."::assignedRoles(): No assigned roles found or user does not exist!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } return $role_arr; }
ilRbacReview::assignedUsers | ( | $ | a_rol_id, | |
$ | a_fields = NULL | |||
) |
get all assigned users to a given role public
integer | role_id | |
array | columns to get form usr_data table (optional) |
Definition at line 334 of file class.ilRbacReview.php.
References $ilBench, $q, and $row.
Referenced by isAssigned().
{ global $ilBench; $ilBench->start("RBAC", "review_assignedUsers"); if (!isset($a_rol_id)) { $message = get_class($this)."::assignedUsers(): No role_id given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $result_arr = array(); if ($a_fields !== NULL and is_array($a_fields)) { if (count($a_fields) == 0) { $select = "*"; } else { if (($usr_id_field = array_search("usr_id",$a_fields)) !== false) unset($a_fields[$usr_id_field]); $select = implode(",",$a_fields).",usr_data.usr_id"; } $q = "SELECT ".$select." FROM usr_data ". "LEFT JOIN rbac_ua ON usr_data.usr_id=rbac_ua.usr_id ". "WHERE rbac_ua.rol_id='".$a_rol_id."'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_ASSOC)) { $result_arr[] = $row; } } else { $q = "SELECT usr_id FROM rbac_ua WHERE rol_id='".$a_rol_id."'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_ASSOC)) { array_push($result_arr,$row["usr_id"]); } } $ilBench->stop("RBAC", "review_assignedUsers"); return $result_arr; }
ilRbacReview::getAllRoleFolderIds | ( | ) |
get all role folder ids public
Definition at line 596 of file class.ilRbacReview.php.
Referenced by getParentRoles().
{ $parent = array(); $q = "SELECT DISTINCT parent FROM rbac_fa"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $parent[] = $row->parent; } return $parent; }
ilRbacReview::getAssignableChildRoles | ( | $ | a_ref_id | ) |
Get all assignable roles under a specific node public.
ref_id |
Definition at line 247 of file class.ilRbacReview.php.
References $tree, and getAssignableRoles().
{ global $tree; $roles_data = $this->getAssignableRoles(); // Filter childs of node foreach($roles_data as $role) { if($tree->isGrandChild($a_ref_id,$role['parent'])) { $filtered[] = $role; } } return $filtered ? $filtered : array(); }
ilRbacReview::getAssignableRoles | ( | $ | a_templates = false , |
|
$ | a_internal_roles = false | |||
) |
Returns a list of all assignable roles public.
boolean | if true fetch template roles too |
Definition at line 218 of file class.ilRbacReview.php.
References $q, $row, fetchObjectData(), setRoleType(), and setTemplateFilter().
Referenced by getAssignableChildRoles(), and getRolesByFilter().
{ $role_list = array(); $where = $this->setTemplateFilter($a_templates); $q = "SELECT DISTINCT * FROM object_data ". "JOIN rbac_fa ".$where. "AND object_data.obj_id = rbac_fa.rol_id ". "AND rbac_fa.assign = 'y'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { //ifd $row->title $role_list[] = fetchObjectData($row); } $role_list = $this->setRoleType($role_list); return $role_list; }
ilRbacReview::getFoldersAssignedToRole | ( | $ | a_rol_id, | |
$ | a_assignable = false | |||
) |
returns an array of role folder ids assigned to a role.
A role with stopped inheritance may be assigned to more than one rolefolder. To get only the original location of a role, set the second parameter to true
public
integer | role id | |
boolean | get only rolefolders where role is assignable (true) |
Definition at line 481 of file class.ilRbacReview.php.
Referenced by getObjectsWithStopedInheritance().
{ if (!isset($a_rol_id)) { $message = get_class($this)."::getFoldersAssignedToRole(): No role_id given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } if ($a_assignable) { $where = " AND assign ='y'"; } $q = "SELECT DISTINCT parent FROM rbac_fa ". "WHERE rol_id = '".$a_rol_id."'".$where; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $folders[] = $row->parent; } return $folders ? $folders : array(); }
ilRbacReview::getGlobalAssignableRoles | ( | ) |
get only 'global' roles (with flag 'assign_users') public
Definition at line 576 of file class.ilRbacReview.php.
References $role_id, ilObjRole::_getAssignUsersStatus(), and getGlobalRoles().
{ include_once './classes/class.ilObjRole.php'; foreach($this->getGlobalRoles() as $role_id) { if(ilObjRole::_getAssignUsersStatus($role_id)) { $ga[] = array('obj_id' => $role_id, 'role_type' => 'global'); } } return $ga ? $ga : array(); }
ilRbacReview::getGlobalRoles | ( | ) |
get only 'global' roles public
Definition at line 551 of file class.ilRbacReview.php.
References getRolesOfRoleFolder().
Referenced by getGlobalAssignableRoles(), and getRolesByFilter().
{ return $this->getRolesOfRoleFolder(ROLE_FOLDER_ID,false); }
ilRbacReview::getGlobalRolesArray | ( | ) |
get only 'global' roles public
Definition at line 561 of file class.ilRbacReview.php.
References $role_id, and getRolesOfRoleFolder().
{ foreach($this->getRolesOfRoleFolder(ROLE_FOLDER_ID,false) as $role_id) { $ga[] = array('obj_id' => $role_id, 'role_type' => 'global'); } return $ga ? $ga : array(); }
ilRbacReview::getObjectsWithStopedInheritance | ( | $ | a_rol_id | ) |
get all objects in which the inheritance of role with role_id was stopped the function returns all reference ids of objects containing a role folder.
public
integer | role_id |
Definition at line 725 of file class.ilRbacReview.php.
References $tree, and getFoldersAssignedToRole().
{ $tree = new ilTree(ROOT_FOLDER_ID); if (!isset($a_rol_id)) { $message = get_class($this)."::getObjectsWithStopedInheritance(): No role_id given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $all_rolf_ids = $this->getFoldersAssignedToRole($a_rol_id,false); foreach ($all_rolf_ids as $rolf_id) { $parent[] = $tree->getParentId($rolf_id); } return $parent ? $parent : array(); }
ilRbacReview::getOperationsOfRole | ( | $ | a_rol_id, | |
$ | a_type, | |||
$ | a_parent = 0 | |||
) |
get all possible operations of a specific role The ref_id of the role folder (parent object) is necessary to distinguish local roles public
integer | role_id | |
string | object type | |
integer | role folder id |
Definition at line 645 of file class.ilRbacReview.php.
{ if (!isset($a_rol_id) or !isset($a_type)) { $message = get_class($this)."::getOperationsOfRole(): Missing Parameter!". "role_id: ".$a_rol_id. "type: ".$a_type. "parent_id: ".$a_parent; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $ops_arr = array(); // if no rolefolder id is given, assume global role folder as target if ($a_parent == 0) { $a_parent = ROLE_FOLDER_ID; } $q = "SELECT ops_id FROM rbac_templates ". "WHERE type ='".$a_type."' ". "AND rol_id = '".$a_rol_id."' ". "AND parent = '".$a_parent."'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $ops_arr[] = $row->ops_id; } return $ops_arr; }
ilRbacReview::getOperationsOnType | ( | $ | a_typ_id | ) |
all possible operations of a type public
integer | object_ID of type |
Definition at line 699 of file class.ilRbacReview.php.
References $ops_id, $q, and $row.
{ if (!isset($a_typ_id)) { $message = get_class($this)."::getOperationsOnType(): No type_id given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $q = "SELECT * FROM rbac_ta WHERE typ_id = '".$a_typ_id."'"; $r = $this->ilDB->query($q); while($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $ops_id[] = $row->ops_id; } return $ops_id ? $ops_id : array(); }
ilRbacReview::getParentRoleIds | ( | $ | a_endnode_id, | |
$ | a_templates = false | |||
) |
get an array of parent role ids of all parent roles, if last parameter is set true you get also all parent templates private
integer | ref_id of an object which is end node | |
boolean | true for role templates (default: false) |
Definition at line 157 of file class.ilRbacReview.php.
References $tree, and getParentRoles().
{ global $tree; if (!isset($a_endnode_id)) { $message = get_class($this)."::getParentRoleIds(): No node_id (ref_id) given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $pathIds = $tree->getPathId($a_endnode_id); // add system folder since it may not in the path $pathIds[0] = SYSTEM_FOLDER_ID; return $this->getParentRoles($pathIds,$a_templates); }
ilRbacReview::getParentRoles | ( | $ | a_path, | |
$ | a_templates = false | |||
) |
Get parent roles in a path.
If last parameter is set 'true' it delivers also all templates in the path public
array | array with path_ids | |
boolean | true for role templates (default: false) |
Definition at line 107 of file class.ilRbacReview.php.
References $id, $path, $q, $roles, $row, getAllRoleFolderIds(), and getRoleListByObject().
Referenced by getParentRoleIds().
{ if (!isset($a_path) or !is_array($a_path)) { $message = get_class($this)."::getParentRoles(): No path given or wrong datatype!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $parentRoles = array(); $child = $this->getAllRoleFolderIds(); // CREATE IN() STATEMENT $in = " IN('"; $in .= implode("','",$child); $in .= "') "; foreach ($a_path as $path) { //TODO: move this to tree class !!!! $q = "SELECT * FROM tree ". "WHERE child ".$in. "AND parent = '".$path."'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $roles = $this->getRoleListByObject($row->child,$a_templates); foreach ($roles as $role) { $id = $role["obj_id"]; // TODO: need a parent here? $role["parent"] = $row->child; $parentRoles[$id] = $role; } } } return $parentRoles; }
ilRbacReview::getRoleFolderOfObject | ( | $ | a_ref_id | ) |
returns the data of a role folder assigned to an object public
integer | ref_id of object with a rolefolder object under it |
Definition at line 617 of file class.ilRbacReview.php.
References $ilBench, and $tree.
{ global $tree,$ilBench; $ilBench->start("RBAC", "review_getRoleFolderOfObject"); if (!isset($a_ref_id)) { $message = get_class($this)."::getRoleFolderOfObject(): No ref_id given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $childs = $tree->getChildsByType($a_ref_id,"rolf"); $ilBench->stop("RBAC", "review_getRoleFolderOfObject"); return $childs[0] ? $childs[0] : array(); }
ilRbacReview::getRoleListByObject | ( | $ | a_ref_id, | |
$ | a_templates = false | |||
) |
Returns a list of roles in an container public.
integer | ref_id | |
boolean | if true fetch template roles too |
Definition at line 182 of file class.ilRbacReview.php.
References $q, $row, fetchObjectData(), setRoleType(), and setTemplateFilter().
Referenced by getParentRoles().
{ if (!isset($a_ref_id) or !isset($a_templates)) { $message = get_class($this)."::getRoleListByObject(): Missing parameter!". "ref_id: ".$a_ref_id. "tpl_flag: ".$a_templates; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $role_list = array(); $where = $this->setTemplateFilter($a_templates); $q = "SELECT * FROM object_data ". "JOIN rbac_fa ".$where. "AND object_data.obj_id = rbac_fa.rol_id ". "AND rbac_fa.parent = '".$a_ref_id."'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $role_list[] = fetchObjectData($row); } $role_list = $this->setRoleType($role_list); return $role_list; }
ilRbacReview::getRoleOperationsOnObject | ( | $ | a_role_id, | |
$ | a_ref_id | |||
) |
Definition at line 678 of file class.ilRbacReview.php.
ilRbacReview::getRolesByFilter | ( | $ | a_filter = 0 , |
|
$ | a_user_id = 0 | |||
) |
Definition at line 777 of file class.ilRbacReview.php.
References $q, $roles, $row, assignedRoles(), fetchObjectData(), getAssignableRoles(), getGlobalRoles(), and setRoleType().
{ $assign = "y"; switch($a_filter) { // all (assignable) roles case 1: return $this->getAssignableRoles(); break; // all (assignable) global roles case 2: $where = "WHERE rbac_fa.rol_id IN "; $where .= '('; $where .= implode(',',$this->getGlobalRoles()); $where .= ')'; break; // all (assignable) local roles case 3: case 4: case 5: $where = "WHERE rbac_fa.rol_id NOT IN "; $where .= '('; $where .= implode(',',$this->getGlobalRoles()); $where .= ')'; break; // all role templates case 6: $where = "WHERE object_data.type = 'rolt'"; $assign = "n"; break; // only assigned roles, handled by ilObjUserGUI::roleassignmentObject() case 0: default: if (!$a_user_id) return array(); $where = "WHERE rbac_fa.rol_id IN "; $where .= '('; $where .= implode(',',$this->assignedRoles($a_user_id)); $where .= ')'; break; } $roles = array(); $q = "SELECT DISTINCT * FROM object_data ". "JOIN rbac_fa ".$where. "AND object_data.obj_id = rbac_fa.rol_id ". "AND rbac_fa.assign = '".$assign."'"; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $prefix = (substr($row->title,0,3) == "il_") ? true : false; // all (assignable) internal local roles only if ($a_filter == 4 and !$prefix) { continue; } // all (assignable) non internal local roles only if ($a_filter == 5 and $prefix) { continue; } $roles[] = fetchObjectData($row); } $roles = $this->setRoleType($roles); return $roles ? $roles : array(); }
ilRbacReview::getRolesOfRoleFolder | ( | $ | a_ref_id, | |
$ | a_nonassignable = true | |||
) |
get all roles of a role folder including linked local roles that are created due to stopped inheritance returns an array with role ids public
integer | ref_id of object | |
boolean | if false only get true local roles |
Definition at line 514 of file class.ilRbacReview.php.
References $ilBench, $q, and $row.
Referenced by getGlobalRoles(), and getGlobalRolesArray().
{ global $ilBench; $ilBench->start("RBAC", "review_getRolesOfRoleFolder"); if (!isset($a_ref_id)) { $message = get_class($this)."::getRolesOfRoleFolder(): No ref_id given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } if ($a_nonassignable === false) { $and = " AND assign='y'"; } $q = "SELECT rol_id FROM rbac_fa ". "WHERE parent = '".$a_ref_id."'". $and; $r = $this->ilDB->query($q); while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT)) { $rol_id[] = $row->rol_id; } $ilBench->stop("RBAC", "review_getRolesOfRoleFolder"); return $rol_id ? $rol_id : array(); }
ilRbacReview::ilRbacReview | ( | ) |
Constructor public.
Definition at line 46 of file class.ilRbacReview.php.
References $ilErr, $ilias, $ilLog, and if.
{ global $ilDB,$ilErr,$ilias,$ilLog; $this->log =& $ilLog; // set db & error handler (isset($ilDB)) ? $this->ilDB =& $ilDB : $this->ilDB =& $ilias->db; if (!isset($ilErr)) { $ilErr = new ilErrorHandling(); $ilErr->setErrorHandling(PEAR_ERROR_CALLBACK,array($ilErr,'errorHandler')); } else { $this->ilErr =& $ilErr; } }
ilRbacReview::isAssignable | ( | $ | a_rol_id, | |
$ | a_ref_id | |||
) |
Check if its possible to assign users public.
integer | object id of role | |
integer | ref_id of object in question |
Definition at line 440 of file class.ilRbacReview.php.
References $ilBench, $q, and $row.
{ global $ilBench; $ilBench->start("RBAC", "review_isAssignable"); // exclude system role from rbac if ($a_rol_id == SYSTEM_ROLE_ID) { $ilBench->stop("RBAC", "review_isAssignable"); return true; } if (!isset($a_rol_id) or !isset($a_ref_id)) { $message = get_class($this)."::isAssignable(): Missing parameter!". " role_id: ".$a_rol_id." ,ref_id: ".$a_ref_id; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $q = "SELECT * FROM rbac_fa ". "WHERE rol_id = '".$a_rol_id."' ". "AND parent = '".$a_ref_id."'"; $row = $this->ilDB->getRow($q); $ilBench->stop("RBAC", "review_isAssignable"); return $row->assign == 'y' ? true : false; }
ilRbacReview::isAssigned | ( | $ | a_usr_id, | |
$ | a_role_id | |||
) |
check if a specific user is assigned to specific role public
integer | usr_id | |
integer | role_id |
Definition at line 395 of file class.ilRbacReview.php.
References assignedUsers().
{ return in_array($a_usr_id,$this->assignedUsers($a_role_id)); }
ilRbacReview::isDeleted | ( | $ | a_node_id | ) |
checks if a rolefolder is set as deleted (negative tree_id) public
integer | ref_id of rolefolder |
Definition at line 751 of file class.ilRbacReview.php.
{ $q = "SELECT tree FROM tree WHERE child ='".$a_node_id."'"; $r = $this->ilDB->query($q); $row = $r->fetchRow(DB_FETCHMODE_OBJECT); if (!$row) { $message = sprintf('%s::isDeleted(): Role folder with ref_id %s not found!', get_class($this), $a_node_id); $this->log->write($message,$this->log->FATAL); return true; } // rolefolder is deleted if ($row->tree < 0) { return true; } return false; }
ilRbacReview::roleExists | ( | $ | a_title, | |
$ | a_id = 0 | |||
) |
Checks if a role already exists.
Role title should be unique public
string | role title | |
integer | obj_id of role to exclude in the check. Commonly this is the current role you want to edit |
Definition at line 73 of file class.ilRbacReview.php.
References $q.
{ if (empty($a_title)) { $message = get_class($this)."::roleExists(): No title given!"; $this->ilErr->raiseError($message,$this->ilErr->WARNING); } $clause = ($a_id) ? " AND obj_id != '".$a_id."'" : ""; $q = "SELECT DISTINCT obj_id FROM object_data ". "WHERE title ='".addslashes($a_title)."' ". "AND type IN('role','rolt')". $clause; $r = $this->ilDB->query($q); if ($r->numRows() == 1) { return true; } else { return false; } }
ilRbacReview::setRoleType | ( | $ | a_role_list | ) |
computes role type in role list array: global: roles in ROLE_FOLDER_ID local: assignable roles in other role folders linked: roles with stoppped inheritance template: role templates
private
array | role list |
Definition at line 295 of file class.ilRbacReview.php.
Referenced by getAssignableRoles(), getRoleListByObject(), and getRolesByFilter().
{ foreach ($a_role_list as $key => $val) { // determine role type if ($val["type"] == "rolt") { $a_role_list[$key]["role_type"] = "template"; } else { if ($val["assign"] == "y") { if ($val["parent"] == ROLE_FOLDER_ID) { $a_role_list[$key]["role_type"] = "global"; } else { $a_role_list[$key]["role_type"] = "local"; } } else { $a_role_list[$key]["role_type"] = "linked"; } } } return $a_role_list; }
ilRbacReview::setTemplateFilter | ( | $ | a_templates | ) |
get roles and templates or only roles; returns string for where clause private
boolean | true: with templates |
Definition at line 270 of file class.ilRbacReview.php.
Referenced by getAssignableRoles(), and getRoleListByObject().
{ if ($a_templates === true) { $where = "WHERE object_data.type IN ('role','rolt') "; } else { $where = "WHERE object_data.type = 'role' "; } return $where; }
ilRbacReview::$log = null |
Definition at line 40 of file class.ilRbacReview.php.