tiesa/ldap

简化且实用的 PHP LDAP

dev-master / 1.0.x-dev 2013-02-04 07:37 UTC

This package is not auto-updated.

Last update: 2024-09-22 03:17:24 UTC


README

安装

如果您还没有这样做,安装此组件就像安装 Composer 一样简单。

然后,在您的项目根目录下,创建一个名为 composer.json 的新文件,并将以下内容粘贴到其中

{
    "require": {
        "tiesa/ldap": "dev-master"
    }
}

要选择组件名称和版本,您应参考 Packagist 上的信息

然后,您就可以下载所有供应商库并生成自动加载配置文件了

$ php composer.phar install

从那里开始,加载 Ldap 组件类以及您在 composer.json 配置中支持的其他包,就像在脚本顶部添加以下代码一样简单

require_once '/path/to/project/vendor/autoload.php';

使用方法

连接和绑定

连接到 LDAP 的典型顺序不仅包括建立到服务器的连接,还包括绑定一个用户。这可以这样完成

<?php

use Toyota\Component\Ldap\Core\Manager;
use Toyota\Component\Ldap\Platform\Native\Driver;

$params = array(
    'hostname'      => 'ldap.example.com',
    'base_dn'       => 'dc=example,dc=com'
);
$manager = new Manager($params, new Driver());

$manager->connect();

// Anonymous binding
$manager->bind();

// Ready for searching & persisting information

大多数情况下,您必须使用一个特权用户来绑定到 LDAP 以执行持久性操作

$manager->bind('cn=user,dc=example,dc=com', 'myTopSecretPassword');

连接参数

我们在连接和绑定介绍中看到了一组最小的参数。然而,有许多可用的配置选项

  • hostname: LDAP 服务器的主机名(FQDN)
  • port: 在 LDAP 服务器上连接的端口(常规连接默认为 389,SSL 连接默认为 636)
  • security: SSL 或 TLS 之一。当未设置安全选项时,连接将是纯文本的
  • bind_dn: 默认的区分名用于绑定(在这种情况下,$manager->bind() 将不再匿名)
  • bind_password: 默认的绑定密码
  • options: 默认启用连接的 LDAP 选项(参考 Toyota\Component\Ldap\API\ConnectionInterface)

错误处理

所有 Ldap 错误代码和消息通常都相当不便追踪(并且很容易被遗忘)都通过方便的异常来处理所有 LDAP 操作。

因此,例如,您可以编写以下内容

<?php
// ... namespace imports and $params configuration
$manager = new Manager($params, new Driver());

try {
    $manager->connect();
} catch (ConnectionException $e) {
    // Do something about it
}

try {
    $manager->bind();
} catch (BindingException $e) {
    // Do something about it
}

// ...

所有可用的异常都在 Toyota\Component\Ldap\Exception 命名空间中找到

搜索 LDAP

最基本和最复杂的搜索都通过一个唯一的 API 处理。这是 ldap_read 或 ldap_list 或 ldap_search 疑难问题的终结

<?php
// ... $manager connection & binding

$results = $manager->search(Search::SCOPE_ALL, 'ou=comp,dc=example,dc=com', '(objectclass=*)');

// A search result instance is retrieved which provides iteration capability for a convenient use

foreach ($results as $node) {
    echo $node->getDn();
    foreach ($node->getAttributes() as $attribute) {
        echo sprintf('%s => %s', $attribute->getName(), implode(',', $attribute->getValues()));
    }
}

SCOPE_ALL 将允许您搜索包括您提供的区分名的基节点在内的整个子树。其他选项包括

  • SCOPE_BASE: 只搜索与给定区分名匹配的一个节点
  • SCOPE_ONE: 搜索与给定区分名匹配的节点下的节点

为了方便起见,组件还提供了一个直接的方法来检索您知道其区分名的节点

<?php
$node = $manager->getNode('cn=my,ou=node,dc=example,dc=com');

将信息持久化到 LDAP

忘记所有 ldap_mod_add、ldap_mod_del、ldap_mod_replace、ldap_add 和 ldap_delete。现在您只需记住 save() 和 delete()。组件将跟踪您对 LDAP 条目的所有更改,并将自动发出正确的函数调用,以仅执行这些更改到您的目录中

<?php

$node = $manager->getNode('cn=node,ou=to,ou=update,dc=example,dc=com');
$node->get('username')->set('test_user');
$node->get('objectClass')->add('inetOrgPerson');
$node->get('sn')->set('Doe');
$node->removeAttribute('whatever');

$manager->save($node);

// Update done

$node = new Node()
$node->setDn('ou=create',dc=example,dc=com');
$node->get('objectClass', true)->add(array('top', 'organizationalUnit'));
// The true param creates the attribute on the fly
$node->get('ou', true)->set('create');

$manager->save($node);

// New Ldap entry saved

$manager->delete($node);

// Now it's gone

资源

要运行测试套件,从 github 将项目克隆到您的开发环境中,从分发的版本开始打包您自己的 autoload.php 和 phpunit.xml。您已准备就绪

$ php composer.phar install --dev
$ vendor/bin/phpunit

关于

要求

  • PHP >= 5.3.3 并具有 ldap 扩展
  • Composer

许可证

TIESA Ldap 组件采用 MIT 许可证 - 详细信息请参阅 LICENSE 文件