Profile_User::getUserEntitiesForRight PHP Method

getUserEntitiesForRight() static public method

Get entities for which a user have a right
static public getUserEntitiesForRight ( $user_ID, $right, $is_recursive = true ) : array
$user_ID integer user ID
$right right to check
$is_recursive check also using recursive rights (true by default)
return array of entities ID
    static function getUserEntitiesForRight($user_ID, $right, $is_recursive = true)
    {
        global $DB;
        $query = "SELECT DISTINCT `glpi_profiles_users`.`entities_id`,\n                                `glpi_profiles_users`.`is_recursive`\n                FROM `glpi_profiles_users`\n                INNER JOIN `glpi_profiles`\n                  ON (`glpi_profiles_users`.`profiles_id` = `glpi_profiles`.`id`)\n                INNER JOIN `glpi_profilerights`\n                  ON (`glpi_profilerights`.`profiles_id` = `glpi_profiles`.`id`)\n                WHERE `glpi_profiles_users`.`users_id` = '{$user_ID}'\n                  AND `glpi_profilerights`.`name` = '{$right}'\n                  AND `glpi_profilerights`.`rights` & " . (READ | CREATE | UPDATE | DELETE | PURGE);
        $result = $DB->query($query);
        if ($DB->numrows($result) > 0) {
            $entities = array();
            while ($data = $DB->fetch_assoc($result)) {
                if ($data['is_recursive'] && $is_recursive) {
                    $tab = getSonsOf('glpi_entities', $data['entities_id']);
                    $entities = array_merge($tab, $entities);
                } else {
                    $entities[] = $data['entities_id'];
                }
            }
            return array_unique($entities);
        }
        return array();
    }

Usage Example

Example #1
0
         $ismine = true;
     } else {
         $entities = Profile_User::getUserEntitiesForRight($user->getID(), Planning::READGROUP);
         $groups = Group_User::getUserGroups($user->getID());
         foreach ($groups as $group) {
             if ($_GET["gID"] == $group['id'] && in_array($group['entities_id'], $entities)) {
                 $ismine = true;
             }
         }
     }
 }
 $canview = false;
 // If not mine check global right
 if (!$ismine) {
     // First check user
     $entities = Profile_User::getUserEntitiesForRight($user->getID(), Planning::READALL);
     if ($_GET["uID"]) {
         $userentities = Profile_User::getUserEntities($user->getID());
         $intersect = array_intersect($entities, $userentities);
         if (count($intersect)) {
             $canview = true;
         }
     }
     // Else check group
     if (!$canview && $_GET['gID']) {
         $group = new Group();
         if ($group->getFromDB($_GET['gID'])) {
             if (in_array($group->getEntityID(), $entities)) {
                 $canview = true;
             }
         }
All Usage Examples Of Profile_User::getUserEntitiesForRight