• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

classes/class.ilRbacAdmin.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
00021         +-----------------------------------------------------------------------------+
00022 */
00023 
00024 
00038 class ilRbacAdmin
00039 {
00044         function ilRbacAdmin()
00045         {
00046                 global $ilDB,$ilErr,$ilias;
00047 
00048                 // set db & error handler
00049                 (isset($ilDB)) ? $this->ilDB =& $ilDB : $this->ilDB =& $ilias->db;
00050                 
00051                 if (!isset($ilErr))
00052                 {
00053                         $ilErr = new ilErrorHandling();
00054                         $ilErr->setErrorHandling(PEAR_ERROR_CALLBACK,array($ilErr,'errorHandler'));
00055                 }
00056                 else
00057                 {
00058                         $this->ilErr =& $ilErr;
00059                 }
00060         }
00061 
00069         function removeUser($a_usr_id)
00070         {
00071                 if (!isset($a_usr_id))
00072                 {
00073                         $message = get_class($this)."::removeUser(): No usr_id given!";
00074                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00075                 }
00076 
00077                 $q = "DELETE FROM rbac_ua WHERE usr_id='".$a_usr_id."'";
00078                 $this->ilDB->query($q);
00079                 
00080                 return true;
00081         }
00082 
00090         function deleteRole($a_rol_id,$a_ref_id)
00091         {
00092                 global $lng;
00093 
00094                 if (!isset($a_rol_id) or !isset($a_ref_id))
00095                 {
00096                         $message = get_class($this)."::deleteRole(): Missing parameter! role_id: ".$a_rol_id." ref_id of role folder: ".$a_ref_id;
00097                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00098                 }
00099 
00100                 // exclude system role from rbac
00101                 if ($a_rol_id == SYSTEM_ROLE_ID)
00102                 {
00103                         $this->ilErr->raiseError($lng->txt("msg_sysrole_not_deletable"),$this->ilErr->MESSAGE);
00104                 }
00105 
00106                 // TODO: check assigned users before deletion
00107                 // This is done in ilObjRole. Should be better moved to this place?
00108                 
00109                 // delete user assignements
00110                 $q = "DELETE FROM rbac_ua ".
00111                          "WHERE rol_id = '".$a_rol_id ."'";
00112                 $this->ilDB->query($q);
00113                 
00114                 // delete permission assignments
00115                 $q = "DELETE FROM rbac_pa ".
00116                          "WHERE rol_id = '".$a_rol_id."'";
00117                 $this->ilDB->query($q);
00118                 
00119                 //delete rbac_templates and rbac_fa
00120                 $this->deleteLocalRole($a_rol_id);
00121                 
00122                 return true;
00123         }
00124 
00131         function deleteTemplate($a_obj_id)
00132         {
00133                 if (!isset($a_obj_id))
00134                 {
00135                         $message = get_class($this)."::deleteTemplate(): No obj_id given!";
00136                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00137                 }
00138 
00139                 $q = "DELETE FROM rbac_templates ".
00140                          "WHERE rol_id = '".$a_obj_id ."'";
00141                 $this->ilDB->query($q);
00142 
00143                 $q = "DELETE FROM rbac_fa ".
00144                          "WHERE rol_id = '".$a_obj_id ."'";
00145                 $this->ilDB->query($q);
00146 
00147                 return true;
00148         }
00149 
00157         function deleteLocalRole($a_rol_id,$a_ref_id = 0)
00158         {
00159                 if (!isset($a_rol_id))
00160                 {
00161                         $message = get_class($this)."::deleteLocalRole(): Missing parameter! role_id: '".$a_rol_id."'";
00162                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00163                 }
00164                 
00165                 // exclude system role from rbac
00166                 if ($a_rol_id == SYSTEM_ROLE_ID)
00167                 {
00168                         return true;
00169                 }
00170 
00171                 if ($a_ref_id != 0)
00172                 {
00173                         $clause = "AND parent = '".$a_ref_id."'";
00174                 }
00175                 
00176                 $q = "DELETE FROM rbac_fa ".
00177                          "WHERE rol_id = '".$a_rol_id."' ".
00178                          $clause;
00179 
00180                 $this->ilDB->query($q);
00181 
00182                 $q = "DELETE FROM rbac_templates ".
00183                          "WHERE rol_id = '".$a_rol_id."' ".
00184                          $clause;
00185                 $this->ilDB->query($q);
00186 
00187                 return true;
00188         }
00189 
00190 
00200         function assignUser($a_rol_id,$a_usr_id,$a_default = false)
00201         {
00202                 if (!isset($a_rol_id) or !isset($a_usr_id))
00203                 {
00204                         $message = get_class($this)."::assignUser(): Missing parameter! role_id: ".$a_rol_id." usr_id: ".$a_usr_id;
00205                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00206                 }
00207                 
00208                 $q = "REPLACE INTO rbac_ua ".
00209                          "VALUES ('".$a_usr_id."','".$a_rol_id."')";
00210                 $res = $this->ilDB->query($q);
00211 
00212                 return true;
00213         }
00214 
00222         function deassignUser($a_rol_id,$a_usr_id)
00223         {
00224                 if (!isset($a_rol_id) or !isset($a_usr_id))
00225                 {
00226                         $message = get_class($this)."::deassignUser(): Missing parameter! role_id: ".$a_rol_id." usr_id: ".$a_usr_id;
00227                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00228                 }
00229 
00230                 $q = "DELETE FROM rbac_ua ".
00231                          "WHERE usr_id='".$a_usr_id."' ".
00232                          "AND rol_id='".$a_rol_id."'";
00233                 $this->ilDB->query($q);
00234                 
00235                 return true;
00236         }
00237 
00246         function grantPermission($a_rol_id,$a_ops,$a_ref_id)
00247         {
00248                 if (!isset($a_rol_id) or !isset($a_ops) or !isset($a_ref_id))
00249                 {
00250                         $this->ilErr->raiseError(get_class($this)."::grantPermission(): Missing parameter! ".
00251                                                         "role_id: ".$a_rol_id." ref_id: ".$a_ref_id." operations: ",$this->ilErr->WARNING);
00252                 }
00253 
00254                 if (!is_array($a_ops))
00255                 {
00256                         $this->ilErr->raiseError(get_class($this)."::grantPermission(): Wrong datatype for operations!",
00257                                                                          $this->ilErr->WARNING);
00258                 }
00259                 
00260                 if (count($a_ops) == 0)
00261                 {
00262                         return false;
00263                 }
00264                 
00265                 // exclude system role from rbac
00266                 if ($a_rol_id == SYSTEM_ROLE_ID)
00267                 {
00268                         return true;
00269                 }
00270                 
00271                 // convert all values to integer
00272                 foreach ($a_ops as $key => $operation)
00273                 {
00274                         $a_ops[$key] = (int) $operation;
00275                 }
00276 
00277                 // Serialization des ops_id Arrays
00278                 $ops_ids = addslashes(serialize($a_ops));
00279 
00280                 $q = "INSERT INTO rbac_pa (rol_id,ops_id,ref_id) ".
00281                          "VALUES ".
00282                          "('".$a_rol_id."','".$ops_ids."','".$a_ref_id."')";
00283                 $this->ilDB->query($q);
00284 
00285                 return true;
00286         }
00287 
00297         function revokePermission($a_ref_id,$a_rol_id = 0)
00298         {
00299                 if (!isset($a_ref_id))
00300                 {
00301                         $message = get_class($this)."::revokePermission(): Missing parameter! ref_id: ".$a_ref_id;
00302                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00303                 }
00304 
00305                 // exclude system role from rbac
00306                 if ($a_rol_id == SYSTEM_ROLE_ID)
00307                 {
00308                         return true;
00309                 }
00310 
00311                 if ($a_rol_id)
00312                 {
00313                         $and1 = " AND rol_id = '".$a_rol_id."'";
00314                 }
00315                 else
00316                 {
00317                         $and1 = "";
00318                 }
00319 
00320                 // TODO: rename db_field from obj_id to ref_id and remove db-field set_id
00321                 $q = "DELETE FROM rbac_pa ".
00322                          "WHERE ref_id = '".$a_ref_id."' ".
00323                          $and1;
00324                 $this->ilDB->query($q);
00325 
00326                 return true;
00327         }
00328 
00336         function revokePermissionList($a_ref_ids,$a_rol_id)
00337         {
00338                 if (!isset($a_ref_ids) or !is_array($a_ref_ids))
00339                 {
00340                         $message = get_class($this)."::revokePermissionList(): Missing parameter or parameter is not an array! object_list: ".$a_obj_ids;
00341                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00342                 }
00343 
00344                 if (!isset($a_rol_id))
00345                 {
00346                         $message = get_class($this)."::revokePermissionList(): Missing parameter! rol_id: ".$a_rol_id;
00347                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00348                 }
00349 
00350                 // exclude system role from rbac
00351                 if ($a_rol_id == SYSTEM_ROLE_ID)
00352                 {
00353                         return true;
00354                 }
00355 
00356                 $ref_ids = implode(",",$a_ref_ids);
00357 
00358                 // TODO: rename db_field from obj_id to ref_id and remove db-field set_id
00359                 $q = "DELETE FROM rbac_pa ".
00360                          "WHERE ref_id IN (".$ref_ids.") ".
00361                          "AND rol_id = ".$a_rol_id;
00362                 $this->ilDB->query($q);
00363 
00364                 return true;
00365         }
00366 
00377         function copyRolePermission($a_source_id,$a_source_parent,$a_dest_parent,$a_dest_id)
00378         {
00379                 if (!isset($a_source_id) or !isset($a_source_parent) or !isset($a_dest_id) or !isset($a_dest_parent))
00380                 {
00381                         $message = get_class($this)."::copyRolePermission(): Missing parameter! source_id: ".$a_source_id.
00382                                            " source_parent_id: ".$a_source_parent.
00383                                            " dest_id : ".$a_dest_id.
00384                                            " dest_parent_id: ".$a_dest_parent;
00385                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00386                 }
00387                 
00388                 // exclude system role from rbac
00389                 if ($a_dest_id == SYSTEM_ROLE_ID)
00390                 {
00391                         return true;
00392                 }
00393 
00394                 $q = "SELECT * FROM rbac_templates ".
00395                          "WHERE rol_id = '".$a_source_id."' ".
00396                          "AND parent = '".$a_source_parent."'";
00397                 $r = $this->ilDB->query($q);
00398 
00399                 while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT))
00400                 {
00401                         $q = "INSERT INTO rbac_templates ".
00402                                  "VALUES ".
00403                                  "('".$a_dest_id."','".$row->type."','".$row->ops_id."','".$a_dest_parent."')";
00404                         $this->ilDB->query($q);
00405                 }
00406 
00407                 return true;
00408         }
00422         function copyRolePermissionIntersection($a_source1_id,$a_source1_parent,$a_source2_id,$a_source2_parent,$a_dest_parent,$a_dest_id)
00423         {
00424                 if (!isset($a_source1_id) or !isset($a_source1_parent) 
00425                 or !isset($a_source2_id) or !isset($a_source2_parent) 
00426                 or !isset($a_dest_id) or !isset($a_dest_parent))
00427                 {
00428                         $message = get_class($this)."::copyRolePermissionIntersection(): Missing parameter! source1_id: ".$a_source1_id.
00429                                            " source1_parent: ".$a_source1_parent.
00430                                            " source2_id: ".$a_source2_id.
00431                                            " source2_parent: ".$a_source2_parent.
00432                                            " dest_id: ".$a_dest_id.
00433                                            " dest_parent_id: ".$a_dest_parent;
00434                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00435                 }
00436                 
00437                 // exclude system role from rbac
00438                 if ($a_dest_id == SYSTEM_ROLE_ID)
00439                 {
00440                         return true;
00441                 }
00442 
00443                 $q = "SELECT s1.type, s1.ops_id ".
00444                         "FROM rbac_templates AS s1, rbac_templates AS s2 ".
00445                         "WHERE s1.rol_id = '".$a_source1_id."' ".
00446                         "AND s1.parent = '".$a_source1_parent."' ".
00447                         "AND s2.rol_id = '".$a_source2_id."' ".
00448                         "AND s2.parent = '".$a_source2_parent."' ".
00449                         "AND s1.type = s2.type ".
00450                         "AND s1.ops_id = s2.ops_id";
00451                 $r = $this->ilDB->query($q);
00452 
00453                 while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT))
00454                 {
00455                         $q = "INSERT INTO rbac_templates ".
00456                                  "VALUES ".
00457                                  "('".$a_dest_id."','".$row->type."','".$row->ops_id."','".$a_dest_parent."')";
00458                         $this->ilDB->query($q);
00459                 }
00460 
00461                 return true;
00462         }
00463         
00474         function deleteRolePermission($a_rol_id,$a_ref_id,$a_type = false)
00475         {
00476                 if (!isset($a_rol_id) or !isset($a_ref_id))
00477                 {
00478                         $message = get_class($this)."::deleteRolePermission(): Missing parameter! role_id: ".$a_rol_id." ref_id: ".$a_ref_id;
00479                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00480                 }
00481 
00482                 // exclude system role from rbac
00483                 if ($a_rol_id == SYSTEM_ROLE_ID)
00484                 {
00485                         return true;
00486                 }
00487                 
00488                 if ($a_type !== false)
00489                 {
00490                         $and_type = " AND type='".$a_type."'";
00491                 }
00492 
00493                 $q = "DELETE FROM rbac_templates ".
00494                          "WHERE rol_id = '".$a_rol_id."' ".
00495                          "AND parent = '".$a_ref_id."'".
00496                          $and_type;
00497                 $this->ilDB->query($q);
00498 
00499                 return true;
00500         }
00501         
00512         function setRolePermission($a_rol_id,$a_type,$a_ops,$a_ref_id)
00513         {
00514                 if (!isset($a_rol_id) or !isset($a_type) or !isset($a_ops) or !isset($a_ref_id))
00515                 {
00516                         $message = get_class($this)."::setRolePermission(): Missing parameter!".
00517                                            " role_id: ".$a_rol_id.
00518                                            " type: ".$a_type.
00519                                            " operations: ".$a_ops.
00520                                            " ref_id: ".$a_ref_id;
00521                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00522                 }
00523 
00524                 if (!is_string($a_type) or empty($a_type))
00525                 {
00526                         $message = get_class($this)."::setRolePermission(): a_type is no string or empty!";
00527                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00528                 }
00529 
00530                 if (!is_array($a_ops) or empty($a_ops))
00531                 {
00532                         $message = get_class($this)."::setRolePermission(): a_ops is no array or empty!";
00533                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00534                 }
00535                 
00536                 // exclude system role from rbac
00537                 if ($a_rol_id == SYSTEM_ROLE_ID)
00538                 {
00539                         return true;
00540                 }
00541                 
00542                 foreach ($a_ops as $op)
00543                 {
00544                         $q = "INSERT INTO rbac_templates ".
00545                                  "VALUES ".
00546                                  "('".$a_rol_id."','".$a_type."','".$op."','".$a_ref_id."')";
00547                         $this->ilDB->query($q);
00548                 }
00549 
00550                 return true;
00551         }
00552 
00566         function assignRoleToFolder($a_rol_id,$a_parent,$a_assign = "y")
00567         {
00568                 if (!isset($a_rol_id) or !isset($a_parent) or func_num_args() != 3)
00569                 {
00570                         $message = get_class($this)."::assignRoleToFolder(): Missing Parameter!".
00571                                            " role_id: ".$a_rol_id.
00572                                            " parent_id: ".$a_parent.
00573                                            " assign: ".$a_assign;
00574                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00575                 }
00576                 
00577                 // exclude system role from rbac
00578                 if ($a_rol_id == SYSTEM_ROLE_ID)
00579                 {
00580                         return true;
00581                 }
00582                 
00583                 // if a wrong value is passed, always set assign to "n"
00584                 if ($a_assign != "y")
00585                 {
00586                         $a_assign = "n";
00587                 }
00588 
00589                 $q = "INSERT INTO rbac_fa (rol_id,parent,assign) ".
00590                          "VALUES ('".$a_rol_id."','".$a_parent."','".$a_assign."')";
00591                 $this->ilDB->query($q);
00592 
00593                 return true;
00594         }
00595 
00604         function assignOperationToObject($a_type_id,$a_ops_id)
00605         {
00606                 if (!isset($a_type_id) or !isset($a_ops_id))
00607                 {
00608                         $message = get_class($this)."::assignOperationToObject(): Missing parameter!".
00609                                            "type_id: ".$a_type_id.
00610                                            "ops_id: ".$a_ops_id;
00611                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00612                 }
00613 
00614                 $q = "INSERT INTO rbac_ta ".
00615                          "VALUES('".$a_type_id."','".$a_ops_id."')";
00616                 $this->ilDB->query($q);
00617 
00618                 return true;
00619         }
00620 
00629         function deassignOperationFromObject($a_type_id,$a_ops_id)
00630         {
00631                 if (!isset($a_type_id) or !isset($a_ops_id))
00632                 {
00633                         $message = get_class($this)."::deassignPermissionFromObject(): Missing parameter!".
00634                                            "type_id: ".$a_type_id.
00635                                            "ops_id: ".$a_ops_id;
00636                         $this->ilErr->raiseError($message,$this->ilErr->WARNING);
00637                 }
00638 
00639                 $q = "DELETE FROM rbac_ta ".
00640                          "WHERE typ_id = '".$a_type_id."' ".
00641                          "AND ops_id = '".$a_ops_id."'";
00642                 $this->ilDB->query($q);
00643         
00644                 return true;
00645         }
00646 } // END class.ilRbacAdmin
00647 ?>

Generated on Fri Dec 13 2013 08:00:15 for ILIAS Release_3_3_x_branch .rev 46803 by  doxygen 1.7.1