cisco-systems / directory-bundle
思科全球VE目录包
Requires
- php: >=5.3.2
- symfony/symfony: >=2.6
Suggests
- cisco-systems/security-bundle: dev-master
- friendsofsymfony/user-bundle: >=2.0
- stof/doctrine-extensions-bundle: >=1.1
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和密码,您可以通过两种方式做到这一点。
-
在调用
getRepository()
时指定配置的目录名,并添加RDN和密码作为进一步参数$repository = $this->get( 'cisco.ldap' )->getRepository( 'main', $bindRdn, $bindPassword );
-
或者,如果您想将应用程序重新绑定到已连接的目录,请使用存储库的
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
您可能还想覆盖登录模板。