Есть ли способ оптимизировать сопоставление пользователей? - PullRequest
0 голосов
/ 31 октября 2019

Я создал метод для вызова этого getUserIdsByAllBranches (), и возвращаемое значение будет массивом. Если массив не пустой, я буду делать другой процесс. Но у меня проблема здесь при отображении или получении всех пользователей со всеми ветвями.

Вот код:

/**
 * Get all User Ids of Branch Permission User
 * By All Branches
 * @param Array
 * @return Array
 */
public function getUserIdsByAllBranches($override = [])
{
    if (count($override) !== 0) {
        foreach($override as $property => $value) {
            ${$property} = $value;
        }
    } else {
        $branchLength = App::make(BranchRepository::class)->get()->count();
    }

    $userIdsWithAllBranches = [];
    $userIds = $this->getUserIds();

    foreach($userIds as $userId) {
        $identical = true;

        $userBranchIds = array_values($this->get()
            ->where('user_id', $userId)
            ->pluck(['branch_id'])
            ->unique()
            ->toArray());

        if(count($userBranchIds) === $branchLength) {
            $initialPermissions = []; 

            foreach($userBranchIds as $index => $userBranchId) {
                if(!$identical) {
                    continue;
                }

                $branchUserPermissions = $this->get()
                    ->where('user_id', $userId)
                    ->where('branch_id', $userBranchId)
                    ->sortBy('permission_id')
                    ->pluck(['permission_id']);

                if($index === 0) {
                    $initialPermissions = $branchUserPermissions;
                } else {
                    if($initialPermissions != $branchUserPermissions) {
                        $identical = false;
                    }
                }
            }
        } else {
            $identical = false;
        }
        if($identical) {
            array_push($userIdsWithAllBranches, $userId);
        }
    }
    return $userIdsWithAllBranches;
}

/**
 * Get all User Ids of Branch Permission User
 *
 * @return Array
 */
public function getUserIds()
{
    return array_values($this->get()
            ->sortBy('user_id')
            ->pluck(['user_id'])
            ->unique()
            ->toArray());
}

Этот метод getUserIds () будет возвращать все идентификаторы пользователя дляпользовательская таблица прав доступа

Таблица пользователей с правами доступа к филиалам:

  • идентификатор_в_
  • ID_доли
  • ИД_пользователя
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...