有没有一种更快的方法来检查LDAP用户是否在LDAP组中?这很慢,因为它每次都要检查一次?

时间:2019-07-02 11:38:56

标签: php laravel ldap adldap

使用adldap-laravel和Laravel 5.8。

我正在获得基于LDAP组的权限。我可以使用以下命令检查用户是否属于组:$user->ldap->inGroup('Accounts');(返回布尔值)

但是,该方法也接受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 个答案:

答案 0 :(得分:1)

是的,可以通过Adldap的查询生成器来完成。

namespace Cal
{
    class Program
    {
        static void Main(string[] args)
        {
            int a;
            int b;
            int hello;
            string d;
            Console.WriteLine("Input First Number: ");
            a = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Input Second Number: ");
            b = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Plus+, Minus-, Division/, Multiplication*: ");
            d = Console.ReadLine();

            if (d == "+")
            {
                hello = a + b;
            }

            else if (d == "-")
            {
                hello = a - b;
            }

            else if (d == "/")
            {
                hello = a / b;
            }

            else if (d == "*")
            {
                hello = a * b;
            }

            Console.WriteLine("Equals: ");
            Console.WriteLine(hello);
        }
    }
}

samaccountname 可能与您的LDAP提供程序的字段名称不同。无论如何,如果您有任何语法或方法名称错误,我都无法对其进行测试,您将在 /** * 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(); } 中找到相同的方法。算法/过程相同。