Airship\Cabin\Bridge\Blueprint\Permissions::buildUserList PHP Method

buildUserList() public method

Build a heirarchal tree containing all of the groups' permissions
public buildUserList ( string $cabin, integer $contextId, array $actions = [] ) : array
$cabin string Which cabin does this apply to?
$contextId integer Context IDs (see permissions sql)
$actions array Actions in Scope [[id => label], [id2 => label2]]
return array
    public function buildUserList(string $cabin, int $contextId, array $actions = []) : array
    {
        if (empty($cabin) || empty($actions) || empty($contextId)) {
            return [];
        }
        // This is the tree we are building...
        $users = [];
        // Let's grab all the user IDs with relevant bits
        $userIDs = $this->db->run(\Airship\queryStringRoot('security.permissions.users_list_userids', $this->db->getDriver()), $contextId);
        if (empty($userIDs)) {
            return [];
        }
        foreach ($userIDs as $u) {
            $users[] = (int) $u['userid'];
        }
        // Set up a default array
        $baseline = [];
        foreach (\array_values($actions) as $a) {
            $baseline[$a] = false;
        }
        // Now let's set up the permissions list
        $perms = [];
        $label = \Airship\queryStringRoot('security.permissions.users_list_label_contextual', $this->db->getDriver());
        foreach ($users as $u) {
            $perms[$u] = $baseline;
            foreach ($this->db->run($label, $contextId, $u) as $p) {
                $perms[$u][$p['label']] = true;
            }
        }
        return $perms;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * @route crew/permissions/{string}/context/{id}
  *
  * @param string $cabin
  * @param string $contextId
  */
 public function editContext(string $cabin, string $contextId)
 {
     $contextId = (int) $contextId;
     if (!\in_array($cabin, $this->getCabinNamespaces())) {
         \Airship\redirect($this->airship_cabin_prefix . '/crew/permissions');
     }
     $context = $this->perms->getContext($contextId, $cabin);
     if (empty($context)) {
         \Airship\redirect($this->airship_cabin_prefix . '/crew/permissions' . $cabin);
     }
     // Handle post data
     $post = $this->post(new SaveContextFilter());
     if (!empty($post)) {
         if ($this->perms->saveContext($cabin, $contextId, $post)) {
             \Airship\redirect($this->airship_cabin_prefix . '/crew/permissions/' . $cabin . '/context/' . $contextId, ['msg' => 'saved']);
         }
     }
     // Okay,
     $actions = $this->perms->getActionNames($cabin);
     $groupPerms = $this->perms->buildGroupTree($cabin, $contextId, $actions);
     $userPerms = $this->perms->buildUserList($cabin, $contextId, $actions);
     $users = [];
     foreach ($userPerms as $userid => $userPerm) {
         $userid = (int) $userid;
         $users[$userid] = $this->users->getUserAccount($userid, true);
         unset($users[$userid]['password']);
     }
     if (!empty($_GET['msg'])) {
         if ($_GET['msg'] === 'saved') {
             $this->storeLensVar('message', \__('Your changes have been saved.'));
         }
     }
     $this->lens('perms/context', ['actions' => $actions, 'cabin' => $cabin, 'context' => $context, 'permissions' => $groupPerms, 'userperms' => $userPerms, 'users' => $users]);
 }