46 global $ilDB,
$ilErr,$ilias;
49 (isset($ilDB)) ? $this->
ilDB =& $ilDB : $this->
ilDB =& $ilias->db;
73 if (!isset($a_usr_id))
75 $message = get_class($this).
"::removeUser(): No usr_id given!";
76 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
79 $query =
"DELETE FROM rbac_ua WHERE usr_id = ".$ilDB->quote($a_usr_id,
'integer');
96 if (!isset($a_rol_id) or !isset($a_ref_id))
98 $message = get_class($this).
"::deleteRole(): Missing parameter! role_id: ".$a_rol_id.
" ref_id of role folder: ".$a_ref_id;
99 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
103 if ($a_rol_id == SYSTEM_ROLE_ID)
105 $this->ilErr->raiseError($lng->txt(
"msg_sysrole_not_deletable"),$this->ilErr->MESSAGE);
108 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
110 $mapping->deleteRole($a_rol_id);
117 $query =
"DELETE FROM rbac_ua ".
118 "WHERE rol_id = ".$ilDB->quote($a_rol_id,
'integer');
122 $query =
"DELETE FROM rbac_pa ".
123 "WHERE rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
142 if (!isset($a_obj_id))
144 $message = get_class($this).
"::deleteTemplate(): No obj_id given!";
145 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
148 $query =
'DELETE FROM rbac_templates '.
149 'WHERE rol_id = '.$ilDB->quote($a_obj_id,
'integer');
152 $query =
'DELETE FROM rbac_fa '.
153 'WHERE rol_id = '.$ilDB->quote($a_obj_id,
'integer');
170 if (!isset($a_rol_id))
172 $message = get_class($this).
"::deleteLocalRole(): Missing parameter! role_id: '".$a_rol_id.
"'";
173 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
177 if ($a_rol_id == SYSTEM_ROLE_ID)
184 $clause =
'AND parent = '.$ilDB->quote($a_ref_id,
'integer').
' ';
187 $query =
'DELETE FROM rbac_fa '.
188 'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
192 $query =
'DELETE FROM rbac_templates '.
193 'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
211 global $ilDB,$rbacreview;
213 if (!isset($a_rol_id) or !isset($a_usr_id))
215 $message = get_class($this).
"::assignUser(): Missing parameter! role_id: ".$a_rol_id.
" usr_id: ".$a_usr_id;
216 #$this->ilErr->raiseError($message,$this->ilErr->WARNING);
220 $alreadyAssigned = $rbacreview->isAssigned($a_usr_id,$a_rol_id);
223 if (!$alreadyAssigned)
225 $query =
"INSERT INTO rbac_ua (usr_id, rol_id) ".
226 "VALUES (".$ilDB->quote($a_usr_id,
'integer').
",".$ilDB->quote($a_rol_id,
'integer').
")";
229 include_once
'Services/AccessControl/classes/class.ilRoleDesktopItem.php';
235 foreach($role_desk_item_obj->getAll() as $item_data)
237 if(!$tmp_user->isDesktopItem($item_data[
'item_id'],$item_data[
'item_type']))
239 $tmp_user->addDesktopItem($item_data[
'item_id'],$item_data[
'item_type']);
245 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
247 $mapping->assign($a_rol_id,$a_usr_id);
263 if (!isset($a_rol_id) or !isset($a_usr_id))
265 $message = get_class($this).
"::deassignUser(): Missing parameter! role_id: ".$a_rol_id.
" usr_id: ".$a_usr_id;
266 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
269 $query =
"DELETE FROM rbac_ua ".
270 "WHERE usr_id = ".$ilDB->quote($a_usr_id,
'integer').
" ".
271 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
274 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
276 $mapping->deassign($a_rol_id,$a_usr_id);
293 if (!isset($a_rol_id) or !isset($a_ops) or !isset($a_ref_id))
295 $this->ilErr->raiseError(get_class($this).
"::grantPermission(): Missing parameter! ".
296 "role_id: ".$a_rol_id.
" ref_id: ".$a_ref_id.
" operations: ",$this->ilErr->WARNING);
299 if (!is_array($a_ops))
301 $this->ilErr->raiseError(get_class($this).
"::grantPermission(): Wrong datatype for operations!",
302 $this->ilErr->WARNING);
312 if ($a_rol_id == SYSTEM_ROLE_ID)
318 foreach ($a_ops as $key => $operation)
320 $a_ops[$key] = (int) $operation;
324 $ops_ids = serialize($a_ops);
326 $query =
'DELETE FROM rbac_pa '.
327 'WHERE rol_id = %s '.
329 $res = $ilDB->queryF(
$query,array(
'integer',
'integer'),
330 array($a_rol_id,$a_ref_id));
337 $query =
"INSERT INTO rbac_pa (rol_id,ops_id,ref_id) ".
339 "(".$ilDB->quote($a_rol_id,
'integer').
",".$ilDB->quote($ops_ids,
'text').
",".$ilDB->quote($a_ref_id,
'integer').
")";
358 if (!isset($a_ref_id))
361 $message = get_class($this).
"::revokePermission(): Missing parameter! ref_id: ".$a_ref_id;
362 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
364 #$log->write("ilRBACadmin::revokePermission(), 0");
367 if ($a_keep_protected !=
true)
370 if ($a_rol_id == SYSTEM_ROLE_ID)
377 $and1 =
" AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
384 $query =
"DELETE FROM rbac_pa ".
385 "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
396 $roles_in_scope = $rbacreview->getParentRoleIds($a_ref_id);
400 #$log->write("ilRBACadmin::revokePermission(), 1");
404 foreach ($roles_in_scope as $role)
406 if ($role[
'protected'] ==
true)
411 $role_ids[] = $role[
'obj_id'];
420 $query =
'DELETE FROM rbac_pa '.
421 'WHERE '.$ilDB->in(
'rol_id',$role_ids,
false,
'integer').
' '.
422 'AND ref_id = '.$ilDB->quote($a_ref_id,
'integer');
427 #$log->write("ilRBACadmin::revokePermission(), 2");
429 if ($a_rol_id == SYSTEM_ROLE_ID)
435 if ($roles_in_scope[$a_rol_id][
'protected'] ==
true)
440 $query =
"DELETE FROM rbac_pa ".
441 "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
" ".
442 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
459 $query =
"DELETE FROM rbac_pa ".
461 "(SELECT child FROM tree WHERE ".
462 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
463 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
465 "AND rol_id = ".$ilDB->quote($a_role_id,
'integer');
467 $ilDB->manipulate(
$query);
481 $query =
"DELETE FROM rbac_templates ".
483 "(SELECT child FROM tree WHERE ".
484 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
485 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
487 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
489 $ilDB->manipulate(
$query);
491 $query =
"DELETE FROM rbac_fa ".
493 "(SELECT child FROM tree WHERE ".
494 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
495 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
497 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
500 $ilDB->manipulate(
$query);
516 if (!isset($a_ref_ids) or !is_array($a_ref_ids))
518 $message = get_class($this).
"::revokePermissionList(): Missing parameter or parameter is not an array! reference_list: ".var_dump($a_ref_ids);
519 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
522 if (!isset($a_rol_id))
524 $message = get_class($this).
"::revokePermissionList(): Missing parameter! rol_id: ".$a_rol_id;
525 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
529 if ($a_rol_id == SYSTEM_ROLE_ID)
534 $query =
"DELETE FROM rbac_pa ".
535 "WHERE ".$ilDB->in(
'ref_id',$a_ref_ids,
false,
'integer').
' '.
536 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
552 public function copyRolePermissions($a_source_id,$a_source_parent,$a_dest_parent,$a_dest_id,$a_consider_protected =
true)
554 global $tree,$rbacreview;
559 $source_obj = $tree->getParentId($a_source_parent);
560 $target_obj = $tree->getParentId($a_dest_parent);
561 $ops = $rbacreview->getRoleOperationsOnObject($a_source_id,$source_obj);
580 global $rbacreview,$ilDB;
582 if (!isset($a_source_id) or !isset($a_source_parent) or !isset($a_dest_id) or !isset($a_dest_parent))
584 $message = __METHOD__.
": Missing parameter! source_id: ".$a_source_id.
585 " source_parent_id: ".$a_source_parent.
586 " dest_id : ".$a_dest_id.
587 " dest_parent_id: ".$a_dest_parent;
588 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
592 if ($a_dest_id == SYSTEM_ROLE_ID)
598 $query =
'SELECT * FROM rbac_templates '.
599 'WHERE rol_id = '.$ilDB->quote($a_source_id,
'integer').
' '.
600 'AND parent = '.$ilDB->quote($a_source_parent,
'integer');
602 $operations = array();
604 while (
$row = $ilDB->fetchObject(
$res))
606 $operations[$rownum][
'type'] =
$row->type;
607 $operations[$rownum][
'ops_id'] =
$row->ops_id;
612 $query =
'DELETE FROM rbac_templates WHERE rol_id = '.$ilDB->quote($a_dest_id,
'integer').
' '.
613 'AND parent = '.$ilDB->quote($a_dest_parent,
'integer');
616 foreach($operations as
$row => $op)
618 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
620 $ilDB->quote($a_dest_id,
'integer').
",".
621 $ilDB->quote($op[
'type'],
'text').
",".
622 $ilDB->quote($op[
'ops_id'],
'integer').
",".
623 $ilDB->quote($a_dest_parent,
'integer').
")";
624 $ilDB->manipulate(
$query);
628 if ($a_consider_protected ==
true)
630 if ($rbacreview->isProtected($a_source_parent,$a_source_id))
653 global $rbacreview,$ilDB;
655 if (!isset($a_source1_id) or !isset($a_source1_parent)
656 or !isset($a_source2_id) or !isset($a_source2_parent)
657 or !isset($a_dest_id) or !isset($a_dest_parent))
659 $message = get_class($this).
"::copyRolePermissionIntersection(): Missing parameter! source1_id: ".$a_source1_id.
660 " source1_parent: ".$a_source1_parent.
661 " source2_id: ".$a_source2_id.
662 " source2_parent: ".$a_source2_parent.
663 " dest_id: ".$a_dest_id.
664 " dest_parent_id: ".$a_dest_parent;
665 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
669 if ($a_dest_id == SYSTEM_ROLE_ID)
674 if ($rbacreview->isProtected($a_source2_parent,$a_source2_id))
676 $GLOBALS[
'ilLog']->write(__METHOD__.
': Role is protected');
680 $query =
"SELECT s1.type, s1.ops_id ".
681 "FROM rbac_templates s1, rbac_templates s2 ".
682 "WHERE s1.rol_id = ".$ilDB->quote($a_source1_id,
'integer').
" ".
683 "AND s1.parent = ".$ilDB->quote($a_source1_parent,
'integer').
" ".
684 "AND s2.rol_id = ".$ilDB->quote($a_source2_id,
'integer').
" ".
685 "AND s2.parent = ".$ilDB->quote($a_source2_parent,
'integer').
" ".
686 "AND s1.type = s2.type ".
687 "AND s1.ops_id = s2.ops_id";
689 $operations = array();
693 $operations[$rowNum][
'type'] =
$row->type;
694 $operations[$rowNum][
'ops_id'] =
$row->ops_id;
700 $query =
'DELETE FROM rbac_templates WHERE rol_id = '.$ilDB->quote($a_dest_id,
'integer').
' '.
701 'AND parent = '.$ilDB->quote($a_dest_parent,
'integer');
704 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
706 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
707 foreach($operations as $key => $set)
709 $ilDB->execute($sta,array(
737 global $ilDB, $rbacreview;
746 $s1_ops = $rbacreview->getAllOperationsOfRole($a_source1_id,$a_source1_parent);
747 $s2_ops = $rbacreview->getAlloperationsOfRole($a_source2_id,$a_source2_parent);
749 foreach($s2_ops as $type => $ops)
753 if(!isset($s1_ops[$type]) or !in_array($op, $s1_ops[$type]))
755 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
757 $ilDB->quote($a_dest_id,
'integer').
', '.
758 $ilDB->quote($type,
'text').
', '.
759 $ilDB->quote($op,
'integer').
', '.
760 $ilDB->quote($a_dest_parent,
'integer').
' '.
762 $ilDB->manipulate(
$query);
784 if (!isset($a_rol_id) or !isset($a_ref_id))
786 $message = get_class($this).
"::deleteRolePermission(): Missing parameter! role_id: ".$a_rol_id.
" ref_id: ".$a_ref_id;
787 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
791 if ($a_rol_id == SYSTEM_ROLE_ID)
796 if ($a_type !==
false)
798 $and_type =
" AND type=".$ilDB->quote($a_type,
'text').
" ";
801 $query =
'DELETE FROM rbac_templates '.
802 'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
803 'AND parent = '.$ilDB->quote($a_ref_id,
'integer').
' '.
825 if (!isset($a_rol_id) or !isset($a_type) or !isset($a_ops) or !isset($a_ref_id))
827 $message = get_class($this).
"::setRolePermission(): Missing parameter!".
828 " role_id: ".$a_rol_id.
830 " operations: ".$a_ops.
831 " ref_id: ".$a_ref_id;
832 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
835 if (!is_string($a_type) or empty($a_type))
837 $message = get_class($this).
"::setRolePermission(): a_type is no string or empty!";
838 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
841 if (!is_array($a_ops) or empty($a_ops))
843 $message = get_class($this).
"::setRolePermission(): a_ops is no array or empty!";
844 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
848 if ($a_rol_id == SYSTEM_ROLE_ID)
853 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
855 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
856 foreach ($a_ops as $op)
858 $res = $ilDB->execute($sta,array(
884 global $ilDB,$rbacreview;
886 if (!isset($a_rol_id) or !isset($a_parent))
888 $message = get_class($this).
"::assignRoleToFolder(): Missing Parameter!".
889 " role_id: ".$a_rol_id.
890 " parent_id: ".$a_parent.
891 " assign: ".$a_assign;
892 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
896 if ($a_rol_id == SYSTEM_ROLE_ID)
902 if ($a_assign !=
"y")
907 $query = sprintf(
'INSERT INTO rbac_fa (rol_id, parent, assign, protected) '.
908 'VALUES (%s,%s,%s,%s)',
909 $ilDB->quote($a_rol_id,
'integer'),
910 $ilDB->quote($a_parent,
'integer'),
911 $ilDB->quote($a_assign,
'text'),
912 $ilDB->quote(
'n',
'text'));
930 if (!isset($a_type_id) or !isset($a_ops_id))
932 $message = get_class($this).
"::assignOperationToObject(): Missing parameter!".
933 "type_id: ".$a_type_id.
934 "ops_id: ".$a_ops_id;
935 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
938 $query =
"INSERT INTO rbac_ta (typ_id, ops_id) ".
939 "VALUES(".$ilDB->quote($a_type_id,
'integer').
",".$ilDB->quote($a_ops_id,
'integer').
")";
956 if (!isset($a_type_id) or !isset($a_ops_id))
958 $message = get_class($this).
"::deassignPermissionFromObject(): Missing parameter!".
959 "type_id: ".$a_type_id.
960 "ops_id: ".$a_ops_id;
961 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
964 $query =
"DELETE FROM rbac_ta ".
965 "WHERE typ_id = ".$ilDB->quote($a_type_id,
'integer').
" ".
966 "AND ops_id = ".$ilDB->quote($a_ops_id,
'integer');
978 $query =
'UPDATE rbac_fa '.
979 'SET protected = '.$ilDB->quote($a_value,
'text').
' '.
980 'WHERE rol_id = '.$ilDB->quote($a_role_id,
'integer');
997 global $rbacreview,
$ilLog,$ilObjDataCache;
999 $source_rolf = $rbacreview->getRoleFolderIdOfObject($a_source_id);
1000 $target_rolf = $rbacreview->getRoleFolderIdOfObject($a_target_id);
1007 $real_local = array();
1008 foreach($rbacreview->getRolesOfRoleFolder($source_rolf,
false) as $role_data)
1010 $title = $ilObjDataCache->lookupTitle($role_data);
1011 if(substr(
$title,0,3) ==
'il_')
1015 $real_local[] = $role_data;
1017 if(!count($real_local))
1025 if(!is_object($tmp_obj))
1029 $rolf = $tmp_obj->createRoleFolder();
1030 $target_rolf = $rolf->getRefId();
1031 $ilLog->write(__METHOD__.
': Created new role folder with id '.$rolf->getRefId());
1033 foreach($real_local as $role)
1035 include_once (
"./Services/AccessControl/classes/class.ilObjRole.php");
1039 $ilLog->write(__METHOD__.
': Start copying of role '.$orig->getTitle());
1041 $roleObj->setTitle($orig->getTitle());
1042 $roleObj->setDescription($orig->getDescription());
1043 $roleObj->setImportId($orig->getImportId());
1048 $ilLog->write(__METHOD__.
': Added new local role, id '.$roleObj->getId());
1066 global $rbacreview,$tree,
$ilLog;
1068 $new_parent = $tree->getParentId($a_ref_id);
1069 $old_context_roles = $rbacreview->getParentRoleIds($a_old_parent,
false);
1070 $new_context_roles = $rbacreview->getParentRoleIds($new_parent,
false);
1072 $for_addition = $for_deletion = array();
1073 foreach($new_context_roles as $new_role_id => $new_role)
1075 if(!isset($old_context_roles[$new_role_id]))
1077 $for_addition[$new_role_id] = $new_role;
1079 elseif($new_role[
'parent'] != $old_context_roles[$new_role_id][
'parent'])
1082 $for_deletion[$new_role_id] = $new_role;
1083 $for_addition[$new_role_id] = $new_role;
1086 foreach($old_context_roles as $old_role_id => $old_role)
1088 if(!isset($new_context_roles[$old_role_id]))
1090 $for_deletion[$old_role_id] = $old_role;
1094 if(!count($for_deletion) and !count($for_addition))
1099 include_once
"Services/AccessControl/classes/class.ilRbacLog.php";
1101 if($rbac_log_active)
1103 $role_ids = array_unique(array_merge(array_keys($for_deletion), array_keys($for_addition)));
1106 foreach($nodes = $tree->getSubTree($node_data = $tree->getNodeData($a_ref_id),
true) as $node_data)
1108 $node_id = $node_data[
'child'];
1110 if($rbac_log_active)
1118 if(!$node_data[
'type'])
1120 $ilLog->write(__METHOD__.
': No type give. Choosing next tree entry.');
1126 $ilLog->write(__METHOD__.
': Missing subtree node_id');
1130 foreach($for_deletion as $role_id => $role_data)
1132 if($rolf_id = $rbacreview->getRoleFolderIdOfObject($node_id))
1139 foreach($for_addition as $role_id => $role_data)
1143 $ops = $rbacreview->getOperationsOfRole($role_id,$node_data[
'type'],$role_data[
'parent']),
1148 if($rbac_log_active)