1

adldap-laravel と Laravel 5.8 を使用します。

LDAP グループに基づいて権限を取得しています。次を使用して、ユーザーがグループの一部であるかどうかを確認できます: $user->ldap->inGroup('Accounts');(これは bool を返します)

ただし、そのメソッドは も受け入れますarrayが、「ANY」ではなく「AND」検索のようです。

だから私はこれを書いた:

/**
     * 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']);

ただし、チェックに時間がかかります。

私の問題を解決するための改善された方法を知っている人はいますか?

4

1 に答える 1

1

はい、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。アルゴリズム/プロセスは同じです。

于 2019-07-02T14:53:18.323 に答える