cisco-systems/directory-bundle

思科全球VE目录包

安装: 16

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 5

分支: 0

开放问题: 0

类型:symfony-bundle

3.0 2016-08-16 13:51 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:53:03 UTC


README

Symfony包,用于访问Active Directory服务器。

安装

将包添加到composer.json文件中的要求中

"cisco-systems/directory-bundle": "dev-master"

在AppKernel中注册包

public function registerBundles()
{
    $bundles = array(
        // ...
        new CiscoSystems\DirectoryBundle\CiscoSystemsDirectoryBundle(),
        // ...
    );
    // ...
    return $bundles;
}

配置

将包的配置添加到您的config.yml文件中。您可以配置任意数量的目录。一个最小的包配置可能如下所示

cisco_systems_directory:
    default_directory: main
    directories:
        main:
            servers:
                primary:
                    host: ads1.example.com

更详细的配置可能如下所示

cisco_systems_directory:
    default_directory: main
    directories:
        main:
            repository: 'MyProject\\MyBundle\\Directory\\MyDirectoryRepository'
            default_rdn: '%myAppsLdapUsername%'
            default_password: '%myAppsLdapPassword%'
            servers:
                primary:
                    host: ads1.example.com
                secondary:
                    host: ads2.example.com

通常建议将用户名和密码放入parameters.yml文件中,并像下面这样引用这些参数。

注意上面配置示例中的repository键:这可以用于在您的应用层包中创建自定义查询存储库,包含针对您的目录和应用程序定制的函数。

如果没有配置,此包提供的默认存储库提供了一个简单的search()方法,应该能满足大多数需求。默认存储库类是CiscoSystems\DirectoryBundle\Directory\QueryRepository

使用方法

在您的控制器中,您只需从此包提供的服务请求您的目录查询存储库,并在其上调用存储库方法。如果您没有为getRepository()提供参数,它将使用配置的默认目录。

// Example using the configured default directory and the default query repository with the configured Base Distinguished Name for that directory:
$repository = $this->get( 'cisco.ldap' )->getRepository();
$result = $repository->search( $filter );

// Example using the configured default directory and the default query repository, specifying the Base Distinguished Name:
$repository = $this->get( 'cisco.ldap' )->getRepository();
$result = $repository->search( $filter, $baseDn );

// Example using a specific directory and a custom query repository:
$repository = $this->get( 'cisco.ldap' )->getRepository( 'main' );
$result = $repository->myCustomRepositoryMethod( $parameter, $anotherParameter );

自定义查询存储库

如果您需要比默认存储库提供的基本search()方法更多的功能,您可以在应用层包中定义自己的查询存储库。只需扩展默认存储库,并像上面配置示例中那样使用repository键,让cisco.ldap服务知道需要实例化哪个类。

在编写自定义存储库方法时,如果您需要执行默认存储库类中的search()方法无法涵盖的操作,请使用默认存储库的$link属性进行PHP的ldap_*函数。

使用特定的RDN和密码执行LDAP绑定

如果您没有配置默认RDN和密码,或者您想在代码的某个地方使用不同的RDN和密码,您可以通过两种方式做到这一点。

  1. 在调用getRepository()时指定配置的目录名,并添加RDN和密码作为进一步参数

    $repository = $this->get( 'cisco.ldap' )->getRepository( 'main', $bindRdn, $bindPassword );

  2. 或者,如果您想将应用程序重新绑定到已连接的目录,请使用存储库的bind()方法来绑定到特定的RDN和密码组合

    $repository->bind( $bindRdn, $bindPassword );

这就完成了。

如果您不想配置默认RDN和密码,但仍然不想每次执行绑定时都指定RDN和密码(因为它总是当前登录用户的用户名和密码),您可以在包配置中将该目录的bind_authenticated_user变量设置为true

即使您这样做,您也可以通过使用getRepository()方法的第四个参数并将它设置为false来执行匿名绑定

$repository = $this->get( 'cisco.ldap' )->getRepository( 'main', '', '', false );

身份验证

您还可以使用此捆绑包来对用户进行目录认证。为此,该捆绑包提供了一种简单的表单认证服务。要使用此服务,请实现一个 simple_form 登录,如Symfony 烹饪书文章中所述的自定义认证器

请注意,在这种情况下,您不需要在 security.yml 文件中指定编码器,因为密码验证由您要认证的目录处理。

一个示例安全配置可能如下所示

security:
    providers:
        ldap:
            id: cisco.ldap.userprovider
    firewalls:
        main:
            pattern: ^/
            anonymous:  true
            simple_form:
                authenticator: cisco.ldap.authenticator
                check_path:    CiscoSystemsDirectoryBundle_logincheck
                login_path:    CiscoSystemsDirectoryBundle_login
            logout:
                invalidate_session: true

如果您需要对用户对象进行更多操作(而不仅仅是认证),请从这个捆绑包扩展用户提供者,并在上述示例中替换它。

别忘了在您的主 routing.yml 文件中导入此捆绑包的路由

ldap:
    resource: "@CiscoSystemsDirectoryBundle/Controller"
    type:     annotation

您可能还想覆盖登录模板。