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';
231 foreach($role_desk_item_obj->getAll() as $item_data)
233 include_once
'./Services/User/classes/class.ilObjUser.php';
239 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
241 $mapping->assign($a_rol_id,$a_usr_id);
257 if (!isset($a_rol_id) or !isset($a_usr_id))
259 $message = get_class($this).
"::deassignUser(): Missing parameter! role_id: ".$a_rol_id.
" usr_id: ".$a_usr_id;
260 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
263 $query =
"DELETE FROM rbac_ua ".
264 "WHERE usr_id = ".$ilDB->quote($a_usr_id,
'integer').
" ".
265 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
268 include_once(
'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
270 $mapping->deassign($a_rol_id,$a_usr_id);
287 if (!isset($a_rol_id) or !isset($a_ops) or !isset($a_ref_id))
289 $this->ilErr->raiseError(get_class($this).
"::grantPermission(): Missing parameter! ".
290 "role_id: ".$a_rol_id.
" ref_id: ".$a_ref_id.
" operations: ",$this->ilErr->WARNING);
293 if (!is_array($a_ops))
295 $this->ilErr->raiseError(get_class($this).
"::grantPermission(): Wrong datatype for operations!",
296 $this->ilErr->WARNING);
306 if ($a_rol_id == SYSTEM_ROLE_ID)
312 foreach ($a_ops as $key => $operation)
314 $a_ops[$key] = (int) $operation;
318 $ops_ids = serialize($a_ops);
320 $query =
'DELETE FROM rbac_pa '.
321 'WHERE rol_id = %s '.
323 $res = $ilDB->queryF(
$query,array(
'integer',
'integer'),
324 array($a_rol_id,$a_ref_id));
331 $query =
"INSERT INTO rbac_pa (rol_id,ops_id,ref_id) ".
333 "(".$ilDB->quote($a_rol_id,
'integer').
",".$ilDB->quote($ops_ids,
'text').
",".$ilDB->quote($a_ref_id,
'integer').
")";
352 if (!isset($a_ref_id))
355 $message = get_class($this).
"::revokePermission(): Missing parameter! ref_id: ".$a_ref_id;
356 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
358 #$log->write("ilRBACadmin::revokePermission(), 0");
361 if ($a_keep_protected !=
true)
364 if ($a_rol_id == SYSTEM_ROLE_ID)
371 $and1 =
" AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
378 $query =
"DELETE FROM rbac_pa ".
379 "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
390 $roles_in_scope = $rbacreview->getParentRoleIds($a_ref_id);
394 #$log->write("ilRBACadmin::revokePermission(), 1");
398 foreach ($roles_in_scope as $role)
400 if ($role[
'protected'] ==
true)
405 $role_ids[] = $role[
'obj_id'];
414 $query =
'DELETE FROM rbac_pa '.
415 'WHERE '.$ilDB->in(
'rol_id',$role_ids,
false,
'integer').
' '.
416 'AND ref_id = '.$ilDB->quote($a_ref_id,
'integer');
421 #$log->write("ilRBACadmin::revokePermission(), 2");
423 if ($a_rol_id == SYSTEM_ROLE_ID)
429 if ($roles_in_scope[$a_rol_id][
'protected'] ==
true)
434 $query =
"DELETE FROM rbac_pa ".
435 "WHERE ref_id = ".$ilDB->quote($a_ref_id,
'integer').
" ".
436 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer').
" ";
463 $query =
'DELETE FROM rbac_pa '.
465 '( '.$GLOBALS[
'tree']->getSubTreeQuery($a_ref_id,array(
'child')).
' ) '.
466 'AND rol_id = '.$ilDB->quote($a_role_id,
'integer');
468 $ilDB->manipulate(
$query);
492 $query =
'DELETE FROM rbac_templates '.
493 'WHERE parent IN ( '.
494 $GLOBALS[
'tree']->getSubTreeQuery($a_ref_id, array(
'child')).
' ) '.
495 'AND rol_id = '.$ilDB->quote($a_rol_id,
'integer');
499 $ilDB->manipulate(
$query);
510 $query =
'DELETE FROM rbac_fa '.
511 'WHERE parent IN ( '.
512 $GLOBALS[
'tree']->getSubTreeQuery($a_ref_id,array(
'child')).
' ) '.
513 'AND rol_id = '.$ilDB->quote($a_rol_id,
'integer');
518 $ilDB->manipulate(
$query);
534 if (!isset($a_ref_ids) or !is_array($a_ref_ids))
536 $message = get_class($this).
"::revokePermissionList(): Missing parameter or parameter is not an array! reference_list: ".var_dump($a_ref_ids);
537 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
540 if (!isset($a_rol_id))
542 $message = get_class($this).
"::revokePermissionList(): Missing parameter! rol_id: ".$a_rol_id;
543 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
547 if ($a_rol_id == SYSTEM_ROLE_ID)
552 $query =
"DELETE FROM rbac_pa ".
553 "WHERE ".$ilDB->in(
'ref_id',$a_ref_ids,
false,
'integer').
' '.
554 "AND rol_id = ".$ilDB->quote($a_rol_id,
'integer');
570 public function copyRolePermissions($a_source_id,$a_source_parent,$a_dest_parent,$a_dest_id,$a_consider_protected =
true)
572 global $tree,$rbacreview;
577 $source_obj = $tree->getParentId($a_source_parent);
578 $target_obj = $tree->getParentId($a_dest_parent);
579 $ops = $rbacreview->getRoleOperationsOnObject($a_source_id,$source_obj);
598 global $rbacreview,$ilDB;
600 if (!isset($a_source_id) or !isset($a_source_parent) or !isset($a_dest_id) or !isset($a_dest_parent))
602 $message = __METHOD__.
": Missing parameter! source_id: ".$a_source_id.
603 " source_parent_id: ".$a_source_parent.
604 " dest_id : ".$a_dest_id.
605 " dest_parent_id: ".$a_dest_parent;
606 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
610 if ($a_dest_id == SYSTEM_ROLE_ID)
616 $query =
'SELECT * FROM rbac_templates '.
617 'WHERE rol_id = '.$ilDB->quote($a_source_id,
'integer').
' '.
618 'AND parent = '.$ilDB->quote($a_source_parent,
'integer');
620 $operations = array();
622 while (
$row = $ilDB->fetchObject(
$res))
624 $operations[$rownum][
'type'] =
$row->type;
625 $operations[$rownum][
'ops_id'] =
$row->ops_id;
630 $query =
'DELETE FROM rbac_templates WHERE rol_id = '.$ilDB->quote($a_dest_id,
'integer').
' '.
631 'AND parent = '.$ilDB->quote($a_dest_parent,
'integer');
634 foreach($operations as
$row => $op)
636 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
638 $ilDB->quote($a_dest_id,
'integer').
",".
639 $ilDB->quote($op[
'type'],
'text').
",".
640 $ilDB->quote($op[
'ops_id'],
'integer').
",".
641 $ilDB->quote($a_dest_parent,
'integer').
")";
642 $ilDB->manipulate(
$query);
646 if ($a_consider_protected ==
true)
648 if ($rbacreview->isProtected($a_source_parent,$a_source_id))
671 global $rbacreview,$ilDB;
673 if (!isset($a_source1_id) or !isset($a_source1_parent)
674 or !isset($a_source2_id) or !isset($a_source2_parent)
675 or !isset($a_dest_id) or !isset($a_dest_parent))
677 $message = get_class($this).
"::copyRolePermissionIntersection(): Missing parameter! source1_id: ".$a_source1_id.
678 " source1_parent: ".$a_source1_parent.
679 " source2_id: ".$a_source2_id.
680 " source2_parent: ".$a_source2_parent.
681 " dest_id: ".$a_dest_id.
682 " dest_parent_id: ".$a_dest_parent;
683 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
687 if ($a_dest_id == SYSTEM_ROLE_ID)
692 if ($rbacreview->isProtected($a_source2_parent,$a_source2_id))
694 $GLOBALS[
'ilLog']->write(__METHOD__.
': Role is protected');
698 $query =
"SELECT s1.type, s1.ops_id ".
699 "FROM rbac_templates s1, rbac_templates s2 ".
700 "WHERE s1.rol_id = ".$ilDB->quote($a_source1_id,
'integer').
" ".
701 "AND s1.parent = ".$ilDB->quote($a_source1_parent,
'integer').
" ".
702 "AND s2.rol_id = ".$ilDB->quote($a_source2_id,
'integer').
" ".
703 "AND s2.parent = ".$ilDB->quote($a_source2_parent,
'integer').
" ".
704 "AND s1.type = s2.type ".
705 "AND s1.ops_id = s2.ops_id";
707 $operations = array();
711 $operations[$rowNum][
'type'] =
$row->type;
712 $operations[$rowNum][
'ops_id'] =
$row->ops_id;
718 $query =
'DELETE FROM rbac_templates WHERE rol_id = '.$ilDB->quote($a_dest_id,
'integer').
' '.
719 'AND parent = '.$ilDB->quote($a_dest_parent,
'integer');
722 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
724 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
725 foreach($operations as $key => $set)
727 $ilDB->execute($sta,array(
755 global $ilDB, $rbacreview;
758 $s1_ops = $rbacreview->getAllOperationsOfRole($a_source1_id,$a_source1_parent);
759 $s2_ops = $rbacreview->getAlloperationsOfRole($a_source2_id,$a_source2_parent);
763 $GLOBALS[
'ilLog']->write(__METHOD__.
': '.print_r($s1_ops,TRUE));
764 $GLOBALS[
'ilLog']->write(__METHOD__.
': '.print_r($s2_ops,TRUE));
766 foreach($s1_ops as $type => $ops)
772 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
774 $ilDB->quote($a_dest_id,
'integer').
', '.
775 $ilDB->quote($type,
'text').
', '.
776 $ilDB->quote($op,
'integer').
', '.
777 $ilDB->quote($a_dest_parent,
'integer').
' '.
779 $ilDB->manipulate(
$query);
784 foreach($s2_ops as $type => $ops)
788 if(!isset($s1_ops[$type]) or !in_array($op, $s1_ops[$type]))
790 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
792 $ilDB->quote($a_dest_id,
'integer').
', '.
793 $ilDB->quote($type,
'text').
', '.
794 $ilDB->quote($op,
'integer').
', '.
795 $ilDB->quote($a_dest_parent,
'integer').
' '.
797 $ilDB->manipulate(
$query);
814 global $rbacreview, $ilDB;
816 $s1_ops = $rbacreview->getAllOperationsOfRole($a_source_id,$a_source_parent);
817 $d_ops = $rbacreview->getAllOperationsOfRole($a_dest_id,$a_dest_parent);
819 foreach($s1_ops as $type => $ops)
823 if(isset($d_ops[$type]) and in_array($op, $d_ops[$type]))
825 $query =
'DELETE FROM rbac_templates '.
826 'WHERE rol_id = '.$ilDB->quote($a_dest_id,
'integer').
' '.
827 'AND type = '.$ilDB->quote($type,
'text').
' '.
828 'AND ops_id = '.$ilDB->quote($op,
'integer').
' '.
829 'AND parent = '.$ilDB->quote($a_dest_parent,
'integer');
830 $ilDB->manipulate(
$query);
852 if (!isset($a_rol_id) or !isset($a_ref_id))
854 $message = get_class($this).
"::deleteRolePermission(): Missing parameter! role_id: ".$a_rol_id.
" ref_id: ".$a_ref_id;
855 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
859 if ($a_rol_id == SYSTEM_ROLE_ID)
864 if ($a_type !==
false)
866 $and_type =
" AND type=".$ilDB->quote($a_type,
'text').
" ";
869 $query =
'DELETE FROM rbac_templates '.
870 'WHERE rol_id = '.$ilDB->quote($a_rol_id,
'integer').
' '.
871 'AND parent = '.$ilDB->quote($a_ref_id,
'integer').
' '.
893 if (!isset($a_rol_id) or !isset($a_type) or !isset($a_ops) or !isset($a_ref_id))
895 $message = get_class($this).
"::setRolePermission(): Missing parameter!".
896 " role_id: ".$a_rol_id.
898 " operations: ".$a_ops.
899 " ref_id: ".$a_ref_id;
900 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
903 if (!is_string($a_type) or empty($a_type))
905 $message = get_class($this).
"::setRolePermission(): a_type is no string or empty!";
906 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
909 if (!is_array($a_ops) or empty($a_ops))
911 $message = get_class($this).
"::setRolePermission(): a_ops is no array or empty!";
912 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
916 if ($a_rol_id == SYSTEM_ROLE_ID)
921 $query =
'INSERT INTO rbac_templates (rol_id,type,ops_id,parent) '.
923 $sta = $ilDB->prepareManip(
$query,array(
'integer',
'text',
'integer',
'integer'));
924 foreach ($a_ops as $op)
926 $res = $ilDB->execute($sta,array(
952 global $ilDB,$rbacreview;
954 if (!isset($a_rol_id) or !isset($a_parent))
956 $message = get_class($this).
"::assignRoleToFolder(): Missing Parameter!".
957 " role_id: ".$a_rol_id.
958 " parent_id: ".$a_parent.
959 " assign: ".$a_assign;
960 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
964 if ($a_rol_id == SYSTEM_ROLE_ID)
970 if ($a_assign !=
"y")
975 $query = sprintf(
'INSERT INTO rbac_fa (rol_id, parent, assign, protected) '.
976 'VALUES (%s,%s,%s,%s)',
977 $ilDB->quote($a_rol_id,
'integer'),
978 $ilDB->quote($a_parent,
'integer'),
979 $ilDB->quote($a_assign,
'text'),
980 $ilDB->quote(
'n',
'text'));
998 if (!isset($a_type_id) or !isset($a_ops_id))
1000 $message = get_class($this).
"::assignOperationToObject(): Missing parameter!".
1001 "type_id: ".$a_type_id.
1002 "ops_id: ".$a_ops_id;
1003 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
1006 $query =
"INSERT INTO rbac_ta (typ_id, ops_id) ".
1007 "VALUES(".$ilDB->quote($a_type_id,
'integer').
",".$ilDB->quote($a_ops_id,
'integer').
")";
1024 if (!isset($a_type_id) or !isset($a_ops_id))
1026 $message = get_class($this).
"::deassignPermissionFromObject(): Missing parameter!".
1027 "type_id: ".$a_type_id.
1028 "ops_id: ".$a_ops_id;
1029 $this->ilErr->raiseError($message,$this->ilErr->WARNING);
1032 $query =
"DELETE FROM rbac_ta ".
1033 "WHERE typ_id = ".$ilDB->quote($a_type_id,
'integer').
" ".
1034 "AND ops_id = ".$ilDB->quote($a_ops_id,
'integer');
1054 $query =
'UPDATE rbac_fa '.
1055 'SET protected = '.$ilDB->quote($a_value,
'text').
' '.
1056 'WHERE rol_id = '.$ilDB->quote($a_role_id,
'integer');
1073 global $rbacreview,
$ilLog,$ilObjDataCache;
1075 $source_rolf = $rbacreview->getRoleFolderIdOfObject($a_source_id);
1076 $target_rolf = $rbacreview->getRoleFolderIdOfObject($a_target_id);
1083 $real_local = array();
1084 foreach($rbacreview->getRolesOfRoleFolder($source_rolf,
false) as $role_data)
1086 $title = $ilObjDataCache->lookupTitle($role_data);
1087 if(substr($title,0,3) ==
'il_')
1091 $real_local[] = $role_data;
1093 if(!count($real_local))
1101 if(!is_object($tmp_obj))
1105 $rolf = $tmp_obj->createRoleFolder();
1106 $target_rolf = $rolf->getRefId();
1107 $ilLog->write(__METHOD__.
': Created new role folder with id '.$rolf->getRefId());
1109 foreach($real_local as $role)
1111 include_once (
"./Services/AccessControl/classes/class.ilObjRole.php");
1115 $ilLog->write(__METHOD__.
': Start copying of role '.$orig->getTitle());
1117 $roleObj->setTitle($orig->getTitle());
1118 $roleObj->setDescription($orig->getDescription());
1119 $roleObj->setImportId($orig->getImportId());
1124 $ilLog->write(__METHOD__.
': Added new local role, id '.$roleObj->getId());
1142 global $rbacreview,$tree,
$ilLog;
1144 $new_parent = $tree->getParentId($a_ref_id);
1145 $old_context_roles = $rbacreview->getParentRoleIds($a_old_parent,
false);
1146 $new_context_roles = $rbacreview->getParentRoleIds($new_parent,
false);
1148 $for_addition = $for_deletion = array();
1149 foreach($new_context_roles as $new_role_id => $new_role)
1151 if(!isset($old_context_roles[$new_role_id]))
1153 $for_addition[$new_role_id] = $new_role;
1155 elseif($new_role[
'parent'] != $old_context_roles[$new_role_id][
'parent'])
1158 $for_deletion[$new_role_id] = $new_role;
1159 $for_addition[$new_role_id] = $new_role;
1162 foreach($old_context_roles as $old_role_id => $old_role)
1164 if(!isset($new_context_roles[$old_role_id]))
1166 $for_deletion[$old_role_id] = $old_role;
1170 if(!count($for_deletion) and !count($for_addition))
1175 include_once
"Services/AccessControl/classes/class.ilRbacLog.php";
1177 if($rbac_log_active)
1179 $role_ids = array_unique(array_merge(array_keys($for_deletion), array_keys($for_addition)));
1182 foreach($nodes = $tree->getSubTree($node_data = $tree->getNodeData($a_ref_id),
true) as $node_data)
1184 $node_id = $node_data[
'child'];
1186 if($rbac_log_active)
1194 if(!$node_data[
'type'])
1196 $ilLog->write(__METHOD__.
': No type give. Choosing next tree entry.');
1202 $ilLog->write(__METHOD__.
': Missing subtree node_id');
1206 foreach($for_deletion as $role_id => $role_data)
1208 if($rolf_id = $rbacreview->getRoleFolderIdOfObject($node_id))
1215 foreach($for_addition as $role_id => $role_data)
1219 $ops = $rbacreview->getOperationsOfRole($role_id,$node_data[
'type'],$role_data[
'parent']),
1224 if($rbac_log_active)
1245 $parent_roles = $rbacreview->getParentRoleIds($a_source_ref_id, FALSE);
1246 $GLOBALS[
'ilLog']->write(__METHOD__.
': '. print_r($parent_roles,TRUE));