Есть ли более быстрый способ проверить, входит ли пользователь LDAP в группу LDAP?Это медленно, так как каждый раз проверяет? - PullRequest
1 голос
/ 02 июля 2019

Использование adldap-laravel и Laravel 5.8.

Я получаю разрешения на основе групп LDAP. Я могу проверить, является ли пользователь частью группы, используя: $user->ldap->inGroup('Accounts'); (который возвращает bool)

Однако этот метод также принимает array, но, по-видимому, это поиск "AND", а не "ANY".

Итак, я написал это:

/**
     * LDAP helper, to see if the user is in an AD group.
     * Iterate through and break when a match is found.
     *
     * @param mixed $input
     * @return bool
     */
    public function isInGroup($input)
    {
        if (is_string($input)) {
            $input[] = $input;
        }

        foreach ($input as $group)
            if ($this->ldap->inGroup($group)) {
                return true;
            }
        return false;
    }

Реализовано так: $user->isInGroup(['Accounts', 'Sales', 'Marketing']);

Однако проверка занимает много времени.

Кто-нибудь знает улучшенный способ решения моей проблемы?

1 Ответ

1 голос
/ 02 июля 2019

Да, это можно сделать с помощью построителя запросов Adldap.

     /**
     * LDAP helper, to see if the user is in an AD group.
     * Iterate through and break when a match is found.
     *
     * @param mixed $input
     * @return bool
     */
    public function isInGroup($input){

        if (is_string($input)) {
            $input[] = $input;
        }

        $counter = 0;
        $groupQuery = $this->ldap->search()->groups();
        foreach ($input as $group) {
            if ($counter == 0) {
                $groupQuery->where('samaccountname', '=', $group);
            } else {
                $groupQuery->orWhere('samaccountname', '=', $group);
            }
$counter++;
        }

        return $groupQuery->get()->count();
     }

Это samaccountname может быть другим именем поля для вашего провайдера LDAP. Я не мог проверить это, если есть какой-либо синтаксис или ошибка имени метода в любом случае, вы найдете те же самые методы из вашего Adldap Provider class. Алгоритм / процесс такой же.

...