19 declare(strict_types=1);
    60         $this->db = $DIC->database();
    74         $q = 
"SELECT DISTINCT(obj_id) obj_id FROM object_data " .
    76             "AND type IN('role','rolt')" .
    78         $r = $this->db->query(
$q);
    80             return (
int) $row->obj_id;
   101             foreach ($roles as $role) {
   102                 $id = (
int) $role[
"obj_id"];
   103                 $role[
"parent"] = (
int) $ref_id;
   104                 $parent_roles[
$id] = $role;
   106                 if (!array_key_exists($role[
'obj_id'], $role_hierarchy)) {
   126         $tree = $DIC->repositoryTree();
   128         $pathIds = $tree->getPathId($a_endnode_id);
   145         $query = 
"SELECT * FROM object_data " .
   146             "JOIN rbac_fa ON obj_id = rol_id " .
   148             "AND object_data.obj_id = rbac_fa.rol_id " .
   149             "AND rbac_fa.parent = " . $this->db->quote($a_ref_id, 
'integer') . 
" ";
   151         $res = $this->db->query($query);
   152         while ($row = $this->db->fetchAssoc(
$res)) {
   153             $row[
"desc"] = $row[
"description"];
   154             $row[
"user_id"] = (
int) $row[
"owner"];
   155             $row[
'obj_id'] = (
int) $row[
'obj_id'];
   156             $row[
'rol_id'] = (
int) $row[
'rol_id'];
   157             $row[
'parent'] = (
int) $row[
'parent'];
   169         bool $a_templates = 
false,
   170         bool $a_internal_roles = 
false,
   171         string $title_filter = 
''   173         return iterator_to_array(
   186         bool $a_templates = 
false,
   187         bool $a_internal_roles = 
false,
   188         string $title_filter = 
''   191         $query = 
"SELECT * FROM object_data " .
   192             "JOIN rbac_fa ON obj_id = rol_id " .
   194             "AND rbac_fa.assign = 'y' ";
   196         if (strlen($title_filter)) {
   197             $query .= (
' AND ' . $this->db->like(
   203         $res = $this->db->query($query);
   205         while ($row = $this->db->fetchAssoc(
$res)) {
   206             $row[
"description"] = (string) $row[
"description"];
   207             $row[
"desc"] = $row[
"description"];
   208             $row[
"user_id"] = (
int) $row[
"owner"];
   209             $row[
'obj_id'] = (
int) $row[
'obj_id'];
   210             $row[
'parent'] = (
int) $row[
'parent'];
   224         $tree = $DIC->repositoryTree();
   225         $query = 
'SELECT rol_id FROM rbac_fa fa ' .
   226             'JOIN tree t1 ON t1.child = fa.parent ' .
   227             'JOIN object_data obd ON fa.rol_id = obd.obj_id ' .
   228             'WHERE assign = ' . $this->db->quote(
'y', 
'text') . 
' ' .
   229             'AND obd.type = ' . $this->db->quote(
'role', 
'text') . 
' ' .
   230             'AND t1.child IN (' .
   231             $tree->getSubTreeQuery($ref_id, [
'child']) . 
' ' .
   234         $res = $this->db->query($query);
   238             $role_list[] = (
int) $row->rol_id;
   248         $query = 
"SELECT fa.*, rd.* " .
   249             "FROM object_data rd " .
   250             "JOIN rbac_fa fa ON rd.obj_id = fa.rol_id " .
   251             "WHERE fa.assign = 'y' " .
   252             "AND fa.parent = " . $this->db->quote($a_ref_id, 
'integer') . 
" ";
   254         $res = $this->db->query($query);
   256         while ($row = $this->db->fetchAssoc(
$res)) {
   257             $row[
'rol_id'] = (
int) $row[
'rol_id'];
   258             $row[
'obj_id'] = (
int) $row[
'obj_id'];
   260             $roles_data[] = $row;
   272             $where = 
"WHERE " . $this->db->in(
'object_data.type', [
'role', 
'rolt'], 
false, 
'text') . 
" ";
   274             $where = 
"WHERE " . $this->db->in(
'object_data.type', [
'role'], 
false, 
'text') . 
" ";
   288         foreach ($a_role_list as $key => $val) {
   296         $role_list_entry[
'role_type'] = $this->
buildRoleType($role_list_entry);
   298         return $role_list_entry;
   303         if ($role_list_entry[
'type'] === 
'rolt') {
   307         if ($role_list_entry[
'assign'] !== 
'y') {
   320         if ($value === 
'y') {
   332         $query = 
'select count(distinct(ua.usr_id)) as num from rbac_ua ua ' .
   333             'join object_data on ua.usr_id = obj_id ' .
   334             'join usr_data ud on ua.usr_id = ud.usr_id ' .
   335             'where ' . $this->db->in(
'rol_id', $a_roles, 
false, 
'integer');
   337         $res = $this->db->query($query);
   338         if (
$res->numRows() > 0) {
   340             return isset($row->num) && is_numeric($row->num) ? (
int) $row->num : 0;
   351         if (isset(self::$assigned_users_cache[$a_rol_id])) {
   352             return self::$assigned_users_cache[$a_rol_id];
   356         $query = 
"SELECT usr_id FROM rbac_ua WHERE rol_id= " . $this->db->quote($a_rol_id, 
'integer');
   357         $res = $this->db->query($query);
   358         while ($row = $this->db->fetchAssoc(
$res)) {
   359             $result_arr[] = (
int) $row[
"usr_id"];
   361         self::$assigned_users_cache[$a_rol_id] = $result_arr;
   368     public function isAssigned(
int $a_usr_id, 
int $a_role_id): bool
   370         if (isset(self::$is_assigned_cache[$a_role_id][$a_usr_id])) {
   371             return self::$is_assigned_cache[$a_role_id][$a_usr_id];
   374         $this->db->setLimit(1, 0);
   375         $query = 
"SELECT usr_id FROM rbac_ua WHERE " .
   376             "rol_id= " . $this->db->quote($a_role_id, 
'integer') . 
" " .
   378         $res = $this->db->query($query);
   379         $is_assigned = 
$res->numRows() == 1;
   380         self::$is_assigned_cache[$a_role_id][$a_usr_id] = $is_assigned;
   396         $this->db = $DIC[
'ilDB'];
   398         $this->db->setLimit(1, 0);
   399         $query = 
"SELECT usr_id FROM rbac_ua WHERE " .
   400             $this->db->in(
'rol_id', $a_role_ids, 
false, 
'integer') .
   402         $res = $this->db->query($query);
   404         return $this->db->numRows(
$res) == 1;
   413         $query = 
"SELECT rol_id FROM rbac_ua WHERE usr_id = " . $this->db->quote($a_usr_id, 
'integer');
   415         $res = $this->db->query($query);
   417         while ($row = $this->db->fetchObject(
$res)) {
   418             $role_arr[] = (
int) $row->rol_id;
   429         $query = 
"SELECT ua.rol_id FROM rbac_ua ua " .
   430             "JOIN rbac_fa fa ON ua.rol_id = fa.rol_id " .
   431             "WHERE usr_id = " . $this->db->quote($a_usr_id, 
'integer') . 
' ' .
   435         $res = $this->db->query($query);
   437         while ($row = $this->db->fetchObject(
$res)) {
   438             $role_arr[] = (
int) $row->rol_id;
   454         $query = 
"SELECT * FROM rbac_fa " .
   455             "WHERE rol_id = " . $this->db->quote($a_rol_id, 
'integer') . 
" " .
   456             "AND parent = " . $this->db->quote($a_ref_id, 
'integer') . 
" ";
   457         $res = $this->db->query($query);
   458         while ($row = $this->db->fetchObject(
$res)) {
   459             return $row->assign == 
'y';
   466         $query = 
"SELECT * FROM rbac_fa WHERE rol_id = " . $this->db->quote($a_role_id, 
'integer') . 
' ' .
   467             "AND assign = " . $this->db->quote(
'y', 
'text');
   468         $res = $this->db->query($query);
   469         return $res->numRows() > 1;
   485             $where = 
" AND assign ='y'";
   488         $query = 
"SELECT DISTINCT parent FROM rbac_fa " .
   489             "WHERE rol_id = " . $this->db->quote($a_rol_id, 
'integer') . 
" " . $where . 
" ";
   491         $res = $this->db->query($query);
   493         while ($row = $this->db->fetchObject(
$res)) {
   494             $folders[] = (
int) $row->parent;
   506         if ($a_assignable_only === 
true) {
   507             $and = 
'AND assign = ' . $this->db->quote(
'y', 
'text');
   509         $query = 
"SELECT rol_id FROM rbac_fa " .
   510             "WHERE parent = " . $this->db->quote($a_ref_id, 
'integer') . 
" " .
   513         $res = $this->db->query($query);
   516         while ($row = $this->db->fetchObject(
$res)) {
   517             $role_ids[] = (
int) $row->rol_id;
   532         if ($a_nonassignable === 
false) {
   533             $and = 
" AND assign='y'";
   536         $query = 
"SELECT rol_id FROM rbac_fa " .
   537             "WHERE parent = " . $this->db->quote($a_ref_id, 
'integer') . 
" " .
   540         $res = $this->db->query($query);
   542         while ($row = $this->db->fetchObject(
$res)) {
   543             $rol_id[] = (
int) $row->rol_id;
   568                 $lroles[] = $role_id;
   582             $lroles[] = $role_id;
   595             $ga[] = [
'obj_id' => $role_id,
   596                           'role_type' => 
'global'   611                 $ga[] = [
'obj_id' => $role_id,
   612                               'role_type' => 
'global'   624         $query = 
'SELECT * FROM rbac_fa ' .
   625             'WHERE rol_id = ' . $this->db->quote($a_role_id, 
'integer') . 
' ' .
   626             'AND parent = ' . $this->db->quote($a_parent_id, 
'integer');
   627         $res = $this->db->query($query);
   628         return (
bool) 
$res->numRows();
   637         $query = 
'SELECT * FROM rbac_operations ORDER BY ops_id ';
   638         $res = $this->db->query($query);
   640         while ($row = $this->db->fetchObject(
$res)) {
   641             $ops[] = [
'ops_id' => (
int) $row->ops_id,
   642                            'operation' => $row->operation,
   643                            'description' => $row->description
   655         $query = 
'SELECT * FROM rbac_operations WHERE ops_id = ' . $this->db->quote($ops_id, 
'integer');
   656         $res = $this->db->query($query);
   658         while ($row = $this->db->fetchObject(
$res)) {
   659             $ops = [
'ops_id' => (
int) $row->ops_id,
   660                          'operation' => $row->operation,
   661                          'description' => $row->description
   677         $query = 
"SELECT ops_id,type FROM rbac_templates " .
   678             "WHERE rol_id = " . $this->db->quote($a_rol_id, 
'integer') . 
" " .
   679             "AND parent = " . $this->db->quote($a_parent, 
'integer');
   680         $res = $this->db->query($query);
   683         while ($row = $this->db->fetchObject(
$res)) {
   684             $ops_arr[$row->type][] = (
int) $row->ops_id;
   694         $query = 
'SELECT * FROM rbac_pa ' .
   695             'WHERE ref_id = ' . $this->db->quote($a_ref_id, 
'integer') . 
' ' .
   696             'AND rol_id = ' . $this->db->quote($a_role_id, 
'integer') . 
' ';
   698         $res = $this->db->query($query);
   700             return $row[
'ops_id'] === 
':' ? [] : unserialize($row[
'ops_id'], [
'allowed_classes' => 
false]);
   714         if ($a_parent == 0) {
   718         $query = 
"SELECT ops_id FROM rbac_templates " .
   719             "WHERE type =" . $this->db->quote($a_type, 
'text') . 
" " .
   720             "AND rol_id = " . $this->db->quote($a_rol_id, 
'integer') . 
" " .
   721             "AND parent = " . $this->db->quote($a_parent, 
'integer');
   722         $res = $this->db->query($query);
   723         while ($row = $this->db->fetchObject(
$res)) {
   724             $ops_arr[] = $row->ops_id;
   734         $query = 
"SELECT ops_id FROM rbac_pa " .
   735             "WHERE rol_id = " . $this->db->quote($a_role_id, 
'integer') . 
" " .
   736             "AND ref_id = " . $this->db->quote($a_ref_id, 
'integer') . 
" ";
   738         $res = $this->db->query($query);
   740         while ($row = $this->db->fetchObject(
$res)) {
   741             if ($row->ops_id !== 
':') {
   742                 $ops = unserialize($row->ops_id, [
'allowed_classes' => 
false]);
   755         $query = 
'SELECT ta.ops_id FROM rbac_ta ta JOIN rbac_operations o ON ta.ops_id = o.ops_id ' .
   756             'WHERE typ_id = ' . $this->db->quote($a_typ_id, 
'integer') . 
' ' .
   759         $res = $this->db->query($query);
   761         while ($row = $this->db->fetchObject(
$res)) {
   762             $ops_id[] = (
int) $row->ops_id;
   773         $query = 
"SELECT * FROM object_data WHERE type = 'typ' AND title = " . $this->db->quote($a_type, 
'text') . 
" ";
   774         $res = $this->db->query($query);
   787         if ($a_class != 
'create') {
   788             $condition = 
"AND class != " . $this->db->quote(
'create', 
'text');
   790             $condition = 
"AND class = " . $this->db->quote(
'create', 
'text');
   793         $query = 
"SELECT ro.ops_id FROM rbac_operations ro " .
   794             "JOIN rbac_ta rt ON  ro.ops_id = rt.ops_id " .
   795             "JOIN object_data od ON rt.typ_id = od.obj_id " .
   796             "WHERE type = " . $this->db->quote(
'typ', 
'text') . 
" " .
   797             "AND title = " . $this->db->quote($a_type, 
'text') . 
" " .
   799             "ORDER BY op_order ";
   801         $res = $this->db->query($query);
   804             $ops[] = (
int) $row->ops_id;
   816         $query = 
'SELECT parent p FROM rbac_fa ' .
   817             'WHERE assign = ' . $this->db->quote(
'n', 
'text') . 
' ' .
   818             'AND rol_id = ' . $this->db->quote($a_rol_id, 
'integer') . 
' ';
   820         if ($a_filter !== []) {
   821             $query .= (
'AND ' . $this->db->in(
'parent', (array) $a_filter, 
false, 
'integer'));
   824         $res = $this->db->query($query);
   827             $parent[] = (
int) $row->p;
   839         $r = $this->db->query(
$q);
   844                 '%s::isDeleted(): Role folder with ref_id %s not found!',
   848             $this->log->warning($message);
   851         return $row->tree < 0;
   869             case self::FILTER_ALL:
   872             case self::FILTER_ALL_GLOBAL:
   873                 $where = 
'WHERE ' . $this->db->in(
'rbac_fa.rol_id', $this->
getGlobalRoles(), 
false, 
'integer') . 
' ';
   876             case self::FILTER_ALL_LOCAL:
   877             case self::FILTER_INTERNAL:
   878             case self::FILTER_NOT_INTERNAL:
   879                 $where = 
'WHERE ' . $this->db->in(
'rbac_fa.rol_id', $this->
getGlobalRoles(), 
true, 
'integer');
   882             case self::FILTER_TEMPLATES:
   883                 $where = 
"WHERE object_data.type = 'rolt'";
   893                 $where = 
'WHERE ' . $this->db->in(
   902         $query = 
"SELECT * FROM object_data " .
   903             "JOIN rbac_fa ON obj_id = rol_id " .
   905             "AND rbac_fa.assign = " . $this->db->quote($assign, 
'text') . 
" ";
   907         if (strlen($title_filter)) {
   908             $query .= (
' AND ' . $this->db->like(
   911                 '%' . $title_filter . 
'%'   915         $res = $this->db->query($query);
   916         while ($row = $this->db->fetchAssoc(
$res)) {
   917             $row[
'title'] = $row[
'title'] ?? 
'';
   918             $prefix = str_starts_with($row[
'title'], 
"il_");
   921             if ($a_filter == 4 && !$prefix) {
   926             if ($a_filter == 5 && $prefix) {
   930             $row[
'description'] = $row[
'description'] ?? 
'';
   931             $row[
"desc"] = $row[
"description"];
   932             $row[
"user_id"] = (
int) $row[
"owner"];
   933             $row[
'obj_id'] = (
int) $row[
'obj_id'];
   934             $row[
'rol_id'] = (
int) $row[
'rol_id'];
   935             $row[
'parent'] = (
int) $row[
'parent'];
   943         $q = 
"SELECT obj_id FROM object_data " .
   944             "WHERE title=" . $this->db->quote($a_type, 
'text') . 
" AND type='typ'";
   945         $r = $this->db->query(
$q);
   947             return (
int) $row->obj_id;
   962         $ilDB = $DIC->database();
   963         if ($operations === []) {
   967         $query = 
'SELECT ops_id FROM rbac_operations ' .
   968             'WHERE ' . 
$ilDB->in(
'operation', $operations, 
false, 
'text');
   972         while ($row = 
$ilDB->fetchObject(
$res)) {
   973             $ops_ids[] = (
int) $row->ops_id;
   985         $ilDB = $DIC->database();
   988         if (!is_array(self::$_opsCache)) {
   989             self::$_opsCache = [];
   991             $q = 
"SELECT ops_id, operation FROM rbac_operations";
   994                 self::$_opsCache[$row->operation] = (
int) $row->ops_id;
   999         if (array_key_exists($a_operation, self::$_opsCache)) {
  1000             return self::$_opsCache[$a_operation];
  1014         $ilDB = $DIC->database();
  1017         foreach ($a_type_arr as $type) {
  1018             $operations[] = (
'create_' . $type);
  1021         if ($operations === []) {
  1025         $query = 
'SELECT ops_id, operation FROM rbac_operations ' .
  1026             'WHERE ' . 
$ilDB->in(
'operation', $operations, 
false, 
'text');
  1031         while ($row = 
$ilDB->fetchObject(
$res)) {
  1032             $type_arr = explode(
'_', $row->operation);
  1033             $type = $type_arr[1];
  1035             $ops_ids[$type] = (
int) $row->ops_id;
  1045         $query = 
'SELECT protected FROM rbac_fa ' .
  1047         $res = $this->db->query($query);
  1049             if ($row->protected === 
'y') {
  1058         $query = 
'SELECT blocked from rbac_fa ' .
  1059             'WHERE rol_id = ' . $this->db->quote($a_role_id, 
'integer') . 
' ' .
  1060             'AND parent = ' . $this->db->quote($a_ref_id, 
'integer');
  1061         $res = $this->db->query($query);
  1063             return (
bool) $row->blocked;
  1076         $tree = $DIC[
'tree'];
  1081         $query = 
'SELECT parent from rbac_fa ' .
  1082             'WHERE rol_id = ' . $this->db->quote($a_role_id, 
'integer') . 
' ' .
  1083             'AND blocked = ' . $this->db->quote(1, 
'integer');
  1084         $res = $this->db->query($query);
  1088             $parent_ids[] = (
int) $row->parent;
  1091         foreach ($parent_ids as $parent_id) {
  1092             if ($tree->isGrandChild($parent_id, $a_ref_id)) {
  1105         $rbacsystem = $DIC->rbac()->system();
  1106         $ilUser = $DIC->user();
  1110             $leveladmin = 
false;
  1112         foreach ($a_role_hierarchy as $role_id => $rolf_id) {
  1113             if ($leveladmin == 
true) {
  1114                 $a_parent_roles[$role_id][
'protected'] = 
false;
  1118             if ($a_parent_roles[$role_id][
'protected'] == 
true) {
  1119                 $arr_lvl_roles_user = array_intersect(
  1121                     array_keys($a_role_hierarchy, $rolf_id)
  1124                 foreach ($arr_lvl_roles_user as $lvl_role_id) {
  1126                     $rolf = $a_parent_roles[$role_id][
'parent'];
  1127                     if ($rbacsystem->checkPermission($rolf, $lvl_role_id, 
'edit_permission')) {
  1128                         $a_parent_roles[$role_id][
'protected'] = 
false;
  1133         return $a_parent_roles;
  1144         $ilDB = $DIC->database();
  1148                 'SELECT * FROM rbac_operations ' .
  1149                 'JOIN rbac_ta ON rbac_operations.ops_id = rbac_ta.ops_id ' .
  1150                 'JOIN object_data ON rbac_ta.typ_id = object_data.obj_id ' .
  1151                 'WHERE object_data.title = %s ' .
  1152                 'AND object_data.type = %s ' .
  1153                 'ORDER BY op_order ASC',
  1154                 $ilDB->quote($a_type, 
'text'),
  1155                 $ilDB->quote(
'typ', 
'text')
  1158             $query = 
'SELECT * FROM rbac_operations ORDER BY op_order ASC';
  1161         while ($row = 
$ilDB->fetchAssoc(
$res)) {
  1163                 "ops_id" => (
int) $row[
'ops_id'],
  1164                 "operation" => $row[
'operation'],
  1165                 "desc" => $row[
'description'],
  1166                 "class" => $row[
'class'],
  1167                 "order" => (
int) $row[
'op_order']
  1179         foreach ($a_ops_arr as $ops) {
  1180             $arr[$ops[
'class']][] = [
'ops_id' => (
int) $ops[
'ops_id'],
  1181                                           'name' => $ops[
'operation']
  1194         static $obj_cache = [];
  1196         if (isset($obj_cache[$a_role_id]) && $obj_cache[$a_role_id]) {
  1197             return $obj_cache[$a_role_id];
  1200         $query = 
'SELECT obr.obj_id FROM rbac_fa rfa ' .
  1201             'JOIN object_reference obr ON rfa.parent = obr.ref_id ' .
  1202             'WHERE assign = ' . $this->db->quote(
'y', 
'text') . 
' ' .
  1203             'AND rol_id = ' . $this->db->quote($a_role_id, 
'integer') . 
' ' .
  1204             'AND deleted IS NULL';
  1206         $res = $this->db->query($query);
  1207         $obj_cache[$a_role_id] = 0;
  1208         while ($row = $this->db->fetchObject(
$res)) {
  1209             $obj_cache[$a_role_id] = (
int) $row->obj_id;
  1211         return $obj_cache[$a_role_id];
  1216         $query = 
'SELECT parent p_ref FROM rbac_fa ' .
  1217             'WHERE rol_id = ' . $this->db->quote($a_role_id, 
'integer') . 
' ' .
  1218             'AND assign = ' . $this->db->quote(
'y', 
'text');
  1220         $res = $this->db->query($query);
  1222             return (
int) $row->p_ref;
  1234         if ($rolf_list !== []) {
  1235             foreach ($rolf_list as $rolf) {
  1249         $query = 
"SELECT * FROM object_data " .
  1250             "JOIN rbac_fa ON object_data.obj_id = rbac_fa.rol_id " .
  1252             "AND rbac_fa.assign = 'y' " .
  1253             'AND ' . $this->db->in(
'object_data.obj_id', $role_ids, 
false, 
'integer');
  1255         $res = $this->db->query($query);
  1257         while ($row = $this->db->fetchAssoc(
$res)) {
  1258             $row[
"desc"] = $row[
"description"];
  1259             $row[
"user_id"] = (
int) $row[
"owner"];
  1260             $role_list[] = $row;
  1273         $this->db = $DIC[
'ilDB'];
  1275         $query = 
'SELECT ta.typ_id, obj.title, ops.ops_id, ops.operation FROM rbac_ta ta ' .
  1276             'JOIN object_data obj ON obj.obj_id = ta.typ_id ' .
  1277             'JOIN rbac_operations ops ON ops.ops_id = ta.ops_id ';
  1278         $res = $this->db->query($query);
  1282         while ($row = $this->db->fetchObject(
$res)) {
  1283             $info[$counter][
'typ_id'] = (
int) $row->typ_id;
  1284             $info[$counter][
'type'] = $row->title;
  1285             $info[$counter][
'ops_id'] = (
int) $row->ops_id;
  1286             $info[$counter][
'operation'] = $row->operation;
  1290         return array_values($info);
  1316         return substr($title, 0, 3) == 
'il_';
  1319     public function getParentOfRole(
int $role_id, ?
int $object_ref = null): ?
int  1323         $tree = $DIC[
'tree'];
  1330         $path_ids = $tree->getPathId($object_ref);
  1333         while (
$ref_id = array_pop($path_ids)) {
  1335             foreach ($roles as $role) {
  1336                 if ((
int) $role[
'obj_id'] === $role_id) {
  1349             $and = (
'AND assign = ' . $this->db->quote(
'y', 
'text'));
  1354         $query = 
'SELECT * FROM rbac_fa ' .
  1355             'WHERE rol_id = ' . $this->db->quote($a_role_id, 
'integer') . 
' ' .
  1357         $res = $this->db->query($query);
  1359             return (
int) $row->parent;
  1370         $query = 
"SELECT ops_id FROM rbac_pa JOIN rbac_ua " .
  1371             "ON (rbac_pa.rol_id = rbac_ua.rol_id) " .
  1372             "WHERE rbac_ua.usr_id = " . $this->db->quote($a_user_id, 
'integer') . 
" " .
  1373             "AND rbac_pa.ref_id = " . $this->db->quote($a_ref_id, 
'integer') . 
" ";
  1375         $res = $this->db->query($query);
  1377         while ($row = $this->db->fetchObject(
$res)) {
  1378             $ops = unserialize($row->ops_id, [
'allowed_classes' => 
false]);
  1379             $all_ops = array_merge($all_ops, $ops);
  1381         $all_ops = array_unique($all_ops);
  1383         $set = $this->db->query(
"SELECT operation FROM rbac_operations " .
  1384             " WHERE " . $this->db->in(
"ops_id", $all_ops, 
false, 
"integer"));
  1386         while ($rec = $this->db->fetchAssoc($set)) {
  1387             $perms[] = $rec[
"operation"];
  1390         return array_values(array_filter($perms));
  1398         self::$is_assigned_cache[$a_role_id][$a_user_id] = $a_value;
  1403         return self::$is_assigned_cache[$a_role_id][$a_user_id];
  1411         self::$is_assigned_cache = [];
  1412         self::$assigned_users_cache = [];
  1419             $ilDB = $DIC->database();
  1423             "SELECT ops_id" . PHP_EOL
  1424             . 
"FROM rbac_operations" . PHP_EOL
  1425             . 
"WHERE operation = " . 
$ilDB->quote($operation, 
"text") . PHP_EOL
  1434         return (
int) $row[
"ops_id"] ?? null;
  1441             $ilDB = $DIC->database();
  1445             "SELECT typ_id" . PHP_EOL
  1446             . 
"FROM rbac_ta" . PHP_EOL
  1447             . 
"WHERE typ_id = " . 
$ilDB->quote($type_id, 
"integer") . PHP_EOL
  1448             . 
"AND ops_id = " . 
$ilDB->quote($ops_id, 
"integer") . PHP_EOL
  1451         return (
bool) 
$ilDB->numRows(
$ilDB->query($sql));
 
getRoleListByObject(int $a_ref_id, bool $a_templates=false)
Returns a list of roles in an container. 
 
clearCaches()
Clear assigned users caches. 
 
getOperationsOnType(int $a_typ_id)
all possible operations of a type 
 
getRolesForIDs(array $role_ids, bool $use_templates)
 
roleExists(string $a_title, int $a_id=0)
Checks if a role already exists. 
 
static getLogger(string $a_component_id)
Get component logger. 
 
getRoleOperationsOnObject(int $a_role_id, int $a_ref_id)
 
assignedUsers(int $a_rol_id)
get all assigned users to a given role 
 
getOperation(int $ops_id)
get one operation by operation id 
 
isBlockedAtPosition(int $a_role_id, int $a_ref_id)
 
getUserPermissionsOnObject(int $a_user_id, int $a_ref_id)
Get all user permissions on an object. 
 
getRolesOfObject(int $a_ref_id, bool $a_assignable_only=false)
Get roles of object. 
 
setRoleTypeAndProtection(array $role_list_entry)
 
getOperationsOnTypeString(string $a_type)
all possible operations of a type 
 
getLocalRoles(int $a_ref_id)
Get local roles of object. 
 
__setTemplateFilter(bool $a_templates)
get roles and templates or only roles; returns string for where clause 
 
isSystemGeneratedRole(int $a_role_id)
Check if the role is system generate role or role template. 
 
static _getOperationIdsByName(array $operations)
get ops_id's by name. 
 
getObjectReferenceOfRole(int $a_role_id)
 
getOperationAssignment()
get operation assignments 
 
const FILTER_NOT_INTERNAL
 
__setRoleType(array $a_role_list)
computes role type in role list array: global: roles in ROLE_FOLDER_ID local: assignable roles in oth...
 
isDeleted(int $a_node_id)
Checks if a rolefolder is set as deleted (negative tree_id) 
 
getAllOperationsOfRole(int $a_rol_id, int $a_parent=0)
get all possible operations of a specific role The ref_id of the role folder (parent object) is neces...
 
setAssignedCacheEntry(int $a_role_id, int $a_user_id, bool $a_value)
set entry of assigned_chache 
 
getLocalPolicies(int $a_ref_id)
Get all roles with local policies. 
 
__getParentRoles(array $a_path, bool $a_templates)
Note: This function performs faster than the new getParentRoles function, because it uses database in...
 
static _getOperationList(string $a_type='')
get operation list by object type 
 
static lookupCreateOperationIds(array $a_type_arr)
Lookup operation ids. 
 
getOperationsByTypeAndClass(string $a_type, string $a_class)
Get operations by type and class. 
 
getFoldersAssignedToRole(int $a_rol_id, bool $a_assignable=false)
Returns an array of objects assigned to a role. 
 
static array $is_assigned_cache
 
getGlobalRolesArray()
get only 'global' roles 
 
getAssignableChildRoles(int $a_ref_id)
Get all assignable roles directly under a specific node. 
 
static _lookupTitle(int $obj_id)
 
isRoleAssignedToObject(int $a_role_id, int $a_parent_id)
Check if role is assigned to an object. 
 
getTypeId(string $a_type)
 
buildRoleType(array $role_list_entry)
 
getParentRoleIds(int $a_endnode_id, bool $a_templates=false)
Get an array of parent role ids of all parent roles, if last parameter is set true you get also all p...
 
isAssigned(int $a_usr_id, int $a_role_id)
check if a specific user is assigned to specific role 
 
isDeleteable(int $a_role_id, int $a_rolf_id)
Check if role is deleteable at a specific position. 
 
getGlobalRoles()
get only 'global' roles 
 
getAssignableRolesInSubtree(int $ref_id)
Returns a list of assignable roles in a subtree of the repository. 
 
getNumberOfAssignedUsers(array $a_roles)
Get the number of assigned users to roles (not properly deleted user accounts are not counted) ...
 
__setProtectedStatus(array $a_parent_roles, array $a_role_hierarchy, int $a_ref_id)
 
hasMultipleAssignments(int $a_role_id)
 
static _getCustomRBACOperationId(string $operation, \ilDBInterface $ilDB=null)
 
isBlockedInUpperContext(int $a_role_id, int $a_ref_id)
Check if role is blocked in upper context. 
 
isGlobalRole(int $a_role_id)
Check if role is a global role. 
 
static _getOperationIdByName(string $a_operation)
get operation id by name of operation 
 
getGlobalAssignableRoles()
get only 'global' roles (with flag 'assign_users') 
 
__construct()
Constructor  public. 
 
getOperations()
get all possible operations 
 
static _groupOperationsByClass(array $a_ops_arr)
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
getAssignableRolesGenerator(bool $a_templates=false, bool $a_internal_roles=false, string $title_filter='')
 
getAssignedCacheEntry(int $a_role_id, int $a_user_id)
 
getRolesOfRoleFolder(int $a_ref_id, bool $a_nonassignable=true)
get all roles of a role folder including linked local roles that are created due to stopped inheritan...
 
assignedGlobalRoles(int $a_usr_id)
Get assigned global roles for an user. 
 
getActiveOperationsOfRole(int $a_ref_id, int $a_role_id)
 
isRoleDeleted(int $a_role_id)
return if role is only attached to deleted role folders 
 
static _isRBACOperation(int $type_id, int $ops_id, \ilDBInterface $ilDB=null)
 
static _getAssignUsersStatus(int $a_role_id)
 
isAssignable(int $a_rol_id, int $a_ref_id)
Check if its possible to assign users. 
 
static _lookupType(int $id, bool $reference=false)
 
getRolesByFilter(int $a_filter=0, int $a_user_id=0, string $title_filter='')
 
getOperationsOfRole(int $a_rol_id, string $a_type, int $a_parent=0)
get all possible operations of a specific role The ref_id of the role folder (parent object) is neces...
 
getRoleFolderOfRole(int $a_role_id)
 
getAssignableRoles(bool $a_templates=false, bool $a_internal_roles=false, string $title_filter='')
Returns a list of all assignable roles. 
 
getObjectsWithStopedInheritance(int $a_rol_id, array $a_filter=[])
get all objects in which the inheritance of role with role_id was stopped the function returns all re...
 
buildProtectionByStringValue(string $value)
 
assignedRoles(int $a_usr_id)
get all assigned roles to a given user 
 
getObjectOfRole(int $a_role_id)
Get object id of objects a role is assigned to. 
 
static array $assigned_users_cache
 
isAssignedToAtLeastOneGivenRole(int $a_usr_id, array $a_role_ids)
check if a specific user is assigned to at least one of the given role ids. 
 
isProtected(int $a_ref_id, int $a_role_id)
ref_id not used yet.