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))
360 $message = get_class($this).
"::revokePermission(): Missing parameter! ref_id: ".$a_ref_id;
361 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
363 #$log->write("ilRBACadmin::revokePermission(), 0");
366 if ($a_keep_protected !=
true)
369 if ($a_rol_id == SYSTEM_ROLE_ID)
376 $and1 =
" AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
383 $query =
"DELETE FROM rbac_pa ".
384 "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
395 $roles_in_scope = $rbacreview->getParentRoleIds($a_ref_id);
399 #$log->write("ilRBACadmin::revokePermission(), 1");
403 foreach ($roles_in_scope as $role)
405 if ($role[
'protected'] ==
true)
410 $role_ids[] = $role[
'obj_id'];
419 $query =
'DELETE FROM rbac_pa '.
420 'WHERE '.$ilDB->in(
'rol_id',$role_ids,
false,
'integer').
' '.
421 'AND ref_id = '.$ilDB->quote($a_ref_id,
'integer');
426 #$log->write("ilRBACadmin::revokePermission(), 2");
428 if ($a_rol_id == SYSTEM_ROLE_ID)
434 if ($roles_in_scope[$a_rol_id][
'protected'] ==
true)
439 $query =
"DELETE FROM rbac_pa ".
440 "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
" ".
441 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
458 $query =
"DELETE FROM rbac_pa ".
460 "(SELECT child FROM tree WHERE ".
461 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
462 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
464 "AND rol_id = ".$ilDB->quote($a_role_id,
'integer');
466 $ilDB->manipulate(
$query);
480 $query =
"DELETE FROM rbac_templates ".
482 "(SELECT child FROM tree WHERE ".
483 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
484 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
486 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
488 $ilDB->manipulate(
$query);
490 $query =
"DELETE FROM rbac_fa ".
492 "(SELECT child FROM tree WHERE ".
493 "lft >= (SELECT lft FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) AND ".
494 "rgt <= (SELECT rgt FROM tree WHERE child = ".$ilDB->quote($a_ref_id,
'integer').
" ) ".
496 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
499 $ilDB->manipulate(
$query);
515 if (!isset($a_ref_ids) or !is_array($a_ref_ids))
517 $message = get_class($this).
"::revokePermissionList(): Missing parameter or parameter is not an array! reference_list: ".var_dump($a_ref_ids);
518 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
521 if (!isset($a_rol_id))
523 $message = get_class($this).
"::revokePermissionList(): Missing parameter! rol_id: ".$a_rol_id;
524 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
528 if ($a_rol_id == SYSTEM_ROLE_ID)
533 $query =
"DELETE FROM rbac_pa ".
534 "WHERE ".$ilDB->in(
'ref_id',$a_ref_ids,
false,
'integer').
' '.
535 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
551 public function copyRolePermissions($a_source_id,$a_source_parent,$a_dest_parent,$a_dest_id,$a_consider_protected =
true)
553 global $tree,$rbacreview;
558 $source_obj = $tree->getParentId($a_source_parent);
559 $target_obj = $tree->getParentId($a_dest_parent);
560 $ops = $rbacreview->getRoleOperationsOnObject($a_source_id,$source_obj);
579 global $rbacreview,
$ilDB;
581 if (!isset($a_source_id) or !isset($a_source_parent) or !isset($a_dest_id) or !isset($a_dest_parent))
583 $message = __METHOD__.
": Missing parameter! source_id: ".$a_source_id.
584 " source_parent_id: ".$a_source_parent.
585 " dest_id : ".$a_dest_id.
586 " dest_parent_id: ".$a_dest_parent;
587 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
591 if ($a_dest_id == SYSTEM_ROLE_ID)
596 $query =
'DELETE FROM rbac_templates WHERE rol_id = '.$ilDB->quote($a_dest_id,
'integer').
' '.
597 'AND parent = '.$ilDB->quote($a_dest_parent,
'integer');
600 $query =
'SELECT * FROM rbac_templates '.
601 'WHERE rol_id = '.$ilDB->quote($a_source_id,
'integer').
' '.
602 'AND parent = '.$ilDB->quote($a_source_parent,
'integer');
604 while (
$row = $ilDB->fetchObject(
$res))
606 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
608 $ilDB->quote($a_dest_id,
'integer').
",".
609 $ilDB->quote(
$row->type,
'text').
",".
610 $ilDB->quote(
$row->ops_id,
'integer').
",".
611 $ilDB->quote($a_dest_parent,
'integer').
")";
612 $ilDB->manipulate(
$query);
616 if ($a_consider_protected ==
true)
618 if ($rbacreview->isProtected($a_source_parent,$a_source_id))
641 global $rbacreview,
$ilDB;
643 if (!isset($a_source1_id) or !isset($a_source1_parent)
644 or !isset($a_source2_id) or !isset($a_source2_parent)
645 or !isset($a_dest_id) or !isset($a_dest_parent))
647 $message = get_class($this).
"::copyRolePermissionIntersection(): Missing parameter! source1_id: ".$a_source1_id.
648 " source1_parent: ".$a_source1_parent.
649 " source2_id: ".$a_source2_id.
650 " source2_parent: ".$a_source2_parent.
651 " dest_id: ".$a_dest_id.
652 " dest_parent_id: ".$a_dest_parent;
653 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
657 if ($a_dest_id == SYSTEM_ROLE_ID)
662 if ($rbacreview->isProtected($a_source2_parent,$a_source2_id))
667 $query =
"SELECT s1.type, s1.ops_id ".
668 "FROM rbac_templates s1, rbac_templates s2 ".
669 "WHERE s1.rol_id = ".$ilDB->quote($a_source1_id,
'integer').
" ".
670 "AND s1.parent = ".$ilDB->quote($a_source1_parent,
'integer').
" ".
671 "AND s2.rol_id = ".$ilDB->quote($a_source2_id,
'integer').
" ".
672 "AND s2.parent = ".$ilDB->quote($a_source2_parent,
'integer').
" ".
673 "AND s1.type = s2.type ".
674 "AND s1.ops_id = s2.ops_id";
677 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
679 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
680 while(
$row = $ilDB->fetchObject(
$res))
682 $ilDB->execute($sta,array(
706 if (!isset($a_rol_id) or !isset($a_ref_id))
708 $message = get_class($this).
"::deleteRolePermission(): Missing parameter! role_id: ".$a_rol_id.
" ref_id: ".$a_ref_id;
709 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
713 if ($a_rol_id == SYSTEM_ROLE_ID)
718 if ($a_type !==
false)
720 $and_type =
" AND type=".$ilDB->quote($a_type,
'text').
" ";
723 $query =
'DELETE FROM rbac_templates '.
724 'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
725 'AND parent = '.$ilDB->quote($a_ref_id,
'integer').
' '.
747 if (!isset($a_rol_id) or !isset($a_type) or !isset($a_ops) or !isset($a_ref_id))
749 $message = get_class($this).
"::setRolePermission(): Missing parameter!".
750 " role_id: ".$a_rol_id.
752 " operations: ".$a_ops.
753 " ref_id: ".$a_ref_id;
754 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
757 if (!is_string($a_type) or empty($a_type))
759 $message = get_class($this).
"::setRolePermission(): a_type is no string or empty!";
760 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
763 if (!is_array($a_ops) or empty($a_ops))
765 $message = get_class($this).
"::setRolePermission(): a_ops is no array or empty!";
766 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
770 if ($a_rol_id == SYSTEM_ROLE_ID)
775 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
777 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
778 foreach ($a_ops as $op)
780 $res = $ilDB->execute($sta,array(
808 if (!isset($a_rol_id) or !isset($a_parent))
810 $message = get_class($this).
"::assignRoleToFolder(): Missing Parameter!".
811 " role_id: ".$a_rol_id.
812 " parent_id: ".$a_parent.
813 " assign: ".$a_assign;
814 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
818 if ($a_rol_id == SYSTEM_ROLE_ID)
824 if ($a_assign !=
"y")
829 $query = sprintf(
'INSERT INTO rbac_fa (rol_id, parent, assign, protected) '.
830 'VALUES (%s,%s,%s,%s)',
831 $ilDB->quote($a_rol_id,
'integer'),
832 $ilDB->quote($a_parent,
'integer'),
833 $ilDB->quote($a_assign,
'text'),
834 $ilDB->quote(
'n',
'text'));
852 if (!isset($a_type_id) or !isset($a_ops_id))
854 $message = get_class($this).
"::assignOperationToObject(): Missing parameter!".
855 "type_id: ".$a_type_id.
856 "ops_id: ".$a_ops_id;
857 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
860 $query =
"INSERT INTO rbac_ta (typ_id, ops_id) ".
861 "VALUES(".$ilDB->quote($a_type_id,
'integer').
",".$ilDB->quote($a_ops_id,
'integer').
")";
878 if (!isset($a_type_id) or !isset($a_ops_id))
880 $message = get_class($this).
"::deassignPermissionFromObject(): Missing parameter!".
881 "type_id: ".$a_type_id.
882 "ops_id: ".$a_ops_id;
883 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
886 $query =
"DELETE FROM rbac_ta ".
887 "WHERE typ_id = ".$ilDB->quote($a_type_id,
'integer').
" ".
888 "AND ops_id = ".$ilDB->quote($a_ops_id,
'integer');
900 $query =
'UPDATE rbac_fa '.
901 'SET protected = '.$ilDB->quote($a_value,
'text').
' '.
902 'WHERE rol_id = '.$ilDB->quote($a_role_id,
'integer');
919 global $rbacreview,
$ilLog,$ilObjDataCache;
921 $source_rolf = $rbacreview->getRoleFolderIdOfObject($a_source_id);
922 $target_rolf = $rbacreview->getRoleFolderIdOfObject($a_target_id);
929 $real_local = array();
930 foreach($rbacreview->getRolesOfRoleFolder($source_rolf,
false) as $role_data)
932 $title = $ilObjDataCache->lookupTitle($role_data);
933 if(substr(
$title,0,3) ==
'il_')
937 $real_local[] = $role_data;
939 if(!count($real_local))
947 if(!is_object($tmp_obj))
951 $rolf = $tmp_obj->createRoleFolder();
952 $target_rolf = $rolf->getRefId();
953 $ilLog->write(__METHOD__.
': Created new role folder with id '.$rolf->getRefId());
955 foreach($real_local as $role)
957 include_once (
"./Services/AccessControl/classes/class.ilObjRole.php");
961 $ilLog->write(__METHOD__.
': Start copying of role '.$orig->getTitle());
963 $roleObj->setTitle($orig->getTitle());
964 $roleObj->setDescription($orig->getDescription());
965 $roleObj->setImportId($orig->getImportId());
970 $ilLog->write(__METHOD__.
': Added new local role, id '.$roleObj->getId());
988 global $rbacreview,$tree,
$ilLog;
990 $new_parent = $tree->getParentId($a_ref_id);
991 $old_context_roles = $rbacreview->getParentRoleIds($a_old_parent,
false);
992 $new_context_roles = $rbacreview->getParentRoleIds($new_parent,
false);
994 $for_addition = $for_deletion = array();
995 foreach($new_context_roles as $new_role_id => $new_role)
997 if(!isset($old_context_roles[$new_role_id]))
999 $for_addition[$new_role_id] = $new_role;
1001 elseif($new_role[
'parent'] != $old_context_roles[$new_role_id][
'parent'])
1004 $for_deletion[$new_role_id] = $new_role;
1005 $for_addition[$new_role_id] = $new_role;
1008 foreach($old_context_roles as $old_role_id => $old_role)
1010 if(!isset($new_context_roles[$old_role_id]))
1012 $for_deletion[$old_role_id] = $old_role;
1016 if(!count($for_deletion) and !count($for_addition))
1021 include_once
"Services/AccessControl/classes/class.ilRbacLog.php";
1023 if($rbac_log_active)
1025 $role_ids = array_unique(array_merge(array_keys($for_deletion), array_keys($for_addition)));
1028 foreach($nodes = $tree->getSubTree($node_data = $tree->getNodeData($a_ref_id),
true) as $node_data)
1030 $node_id = $node_data[
'child'];
1032 if($rbac_log_active)
1040 if(!$node_data[
'type'])
1042 $ilLog->write(__METHOD__.
': No type give. Choosing next tree entry.');
1048 $ilLog->write(__METHOD__.
': Missing subtree node_id');
1052 foreach($for_deletion as $role_id => $role_data)
1054 if($rolf_id = $rbacreview->getRoleFolderIdOfObject($node_id))
1061 foreach($for_addition as $role_id => $role_data)
1065 $ops = $rbacreview->getOperationsOfRole($role_id,$node_data[
'type'],$role_data[
'parent']),
1070 if($rbac_log_active)