Пример #1
0
 /**
  * 显示角色列表
  * @param string $field
  */
 public function roleList($is_show = false)
 {
     $this->check_permission(__FUNCTION__);
     if ($is_show === false) {
         jump('', 'pages/roleList.php', '', 0);
     } else {
         $mysql = C('mysql');
         $ua_rid = $mysql->fetchAll('rid', 'user_assignment', "uid={$_SESSION['uid']}");
         foreach ($ua_rid as $value) {
             $roleList[] = $this->recursionRole($value['rid']);
         }
         $roleList = $this->arrayUnqie(multiToOneArray($roleList));
         return $roleList;
     }
 }
Пример #2
0
 /**
  * 寻找指定角色下的所有用户
  * @param number $pid
  * @return array
  */
 public function usersOfRole($pid)
 {
     $mysql = C('mysql');
     $result = $this->recursionUser($pid);
     // 找到跟此父角色有关所有子角色,并添加到$results
     foreach ($result as $value) {
         if (($res = $mysql->fetchAll('uid,rid', 'user_assignment', "rid={$value['id']}")) != false) {
             $results[] = $res;
         }
     }
     $res_ua = multiToOneArray($results);
     $max_offset = count($res_ua);
     for ($offset = 0; $offset < $max_offset; $offset++) {
         for ($offset_in = 0; $offset_in < $max_offset; $offset_in++) {
             if ($offset < $offset_in) {
                 if ($res_ua[$offset]['uid'] == $res_ua[$offset_in]['uid']) {
                     $res_ua[$offset] = array('uid' => '', 'rid' => '');
                 }
             }
         }
     }
     $my_rid = $mysql->fetchAll('rid,uid', 'user_assignment', "uid={$_SESSION['uid']}");
     foreach ($my_rid as $value) {
         $my_rids[] = $value['rid'];
         $my_rids[] = $value['uid'];
     }
     $result_user = array();
     foreach ($res_ua as $value) {
         if (!empty($value['uid'])) {
             $user = $mysql->fetchOne('id,name', 'user', "id={$value['uid']}");
             $ua_user = $mysql->fetchAll('rid,uid', 'user_assignment', "uid={$user['id']}");
             $user_rids = array();
             foreach ($ua_user as $val) {
                 $user_rids[] = $val['rid'];
                 $user_rids[] = $val['uid'];
             }
             if (!empty(array_diff($my_rids, $user_rids))) {
                 //如果不为空,那么这个用户的角色要么是操作用户的子集,要么两者拥有的角色互不相干
                 if (empty(array_diff($user_rids, $my_rids))) {
                     //如果为空,这个用户的角色是操作用户所拥有角色的子集
                     $result_user[] = $mysql->fetchOne('id,name', 'user', "id={$value['uid']}");
                 } else {
                     //反之,如果不为空,那么两者的角色互不相干
                     if (count($user_rids) === 2) {
                         $result_user[] = $mysql->fetchOne('id,name', 'user', "id={$value['uid']}");
                     } elseif ($my_rids[1] == (int) 1) {
                         $result_user[] = $mysql->fetchOne('id,name', 'user', "id={$value['uid']}");
                     }
                 }
             } else {
                 //反之,如果为空,则操作用户可能是该用户的子集,或者两者权限相当
                 if (empty(array_diff($user_rids, $my_rids))) {
                     //如果还是为空,则对比的是自身。这里设定如果对比的两个用户角色相当则无法相互显示,
                     //对比的是自身问题没有解决!!!!!!!                                                  //当然也可以改成可以互相显示,只需要删除$my_rids和$user_rids遍历中的uid
                     $result_user[] = $mysql->fetchOne('id,name', 'user', "id={$value['uid']}");
                 } else {
                     // 反之,操作用户是该用户的子集
                 }
             }
         }
     }
     return $result_user;
 }
Пример #3
0
/**
 * 将多维数组转化成一维数组
 * @param array $data
 * @param array $results
 * @param number $offset
 * @return array
 */
function multiToOneArray($data, &$results = array(), $offset = 0)
{
    foreach ($data as $key => $value) {
        if (is_array($data) && !is_array($value) && $offset == 0) {
            $results[] = $data;
        }
        if (is_array($data) && is_array($value)) {
            multiToOneArray($value, $results);
        }
        $offset++;
    }
    return $results;
}