/** * Display list of all users */ public function getUserlist() { $userlist = UserAgent::getUserlist(); // Logged in user can view other user's profiles $viewProfiles = PermissionHandler::checkAdmin(Auth::user(), Permissions::ALLOW_ALL); $thisUser = Auth::user(); // List of groups this user can invite people to $groupsManaged = []; // For each group logged in user belongs to foreach (ProjectHandler::getUserProjects($thisUser) as $group) { // Check if user has admin permission.. if (PermissionHandler::checkProject($thisUser, $group['name'], Permissions::PROJECT_ADMIN)) { array_push($groupsManaged, $group['name']); } } $userGroupInfo = []; foreach ($userlist as $user) { // List of groups $user belongs to $usergroups = ProjectHandler::getUserProjects($user); $usergroupnames = array_column($usergroups, 'name'); // List of groups logged in user can invite $user to join // and that $user is not already a member of. $inviteGroups = array_diff($groupsManaged, $usergroupnames); $belongGroups = []; foreach ($usergroups as $group) { // Can logged user assign roles for this group ? $canAssign = PermissionHandler::checkProject($thisUser, $group['name'], Permissions::PROJECT_ADMIN); // Can logged user view info for this group ? $canView = PermissionHandler::checkProject($thisUser, $group['name'], Permissions::PROJECT_READ); // User cannot change his own permissions if ($user['_id'] == $thisUser['_id']) { $canAssign = false; } $group['canview'] = $canView; $group['assignrole'] = $canAssign; array_push($belongGroups, $group); } $userGroupInfo[$user['_id']] = ['groups' => $belongGroups, 'tojoin' => $inviteGroups]; } return View::make('users.list')->with('userlist', $userlist)->with('viewProfiles', $viewProfiles)->with('usergroups', $userGroupInfo); }