diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index bfe54a7..9c6150d 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -60,6 +60,8 @@ private function addUserNode() ->scalarNode('filter')->end() ->scalarNode('name_attribute')->defaultValue('uid')->end() ->variableNode('attributes')->defaultValue(array())->end() + ->scalarNode('name_regex_pattern')->end() + ->scalarNode('name_regex_replacement')->end() ->end() ; diff --git a/Manager/LdapManagerUser.php b/Manager/LdapManagerUser.php index 15c83fc..b35ae90 100644 --- a/Manager/LdapManagerUser.php +++ b/Manager/LdapManagerUser.php @@ -116,13 +116,19 @@ private function addLdapUser() ? $this->params['user']['filter'] : ''; + $username = $this->username; + + if(isset($this->params['user']['name_regex_pattern']) && isset($this->params['user']['name_regex_replacement'])){ + $username = preg_replace($this->params['user']['name_regex_pattern'], $this->params['user']['name_regex_replacement'], $username); + } + $entries = $this->ldapConnection ->search(array( 'base_dn' => $this->params['user']['base_dn'], 'filter' => sprintf('(&%s(%s=%s))', $filter, $this->params['user']['name_attribute'], - $this->ldapConnection->escape($this->username) + $this->ldapConnection->escape($username) ) )); @@ -144,7 +150,7 @@ private function addLdapRoles() if (null === $this->ldapUser) { throw new \RuntimeException('Cannot assign LDAP roles before authenticating user against LDAP'); } - + $this->ldapUser['roles'] = array(); if (!isset($this->params['role'])) { diff --git a/README.md b/README.md index 3083853..60f223f 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ security: providers: ldap: id: imag_ldap.security.user.provider - + encoders: IMAG\LdapBundle\User\LdapUser: plaintext @@ -92,6 +92,8 @@ imag_ldap: user: base_dn: ou=people,dc=host,dc=foo # filter: (&(foo=bar)(ObjectClass=Person)) #Optional +# name_regex_pattern: '#^[^\\]*\\(.*)$#' #Optional +# name_regex_replacement: '$1' #Optional name_attribute: uid role: base_dn: ou=group, dc=host, dc=foo @@ -156,7 +158,7 @@ security: providers: multiples: chain: - providers: [ldap, db] + providers: [ldap, db] ldap: id: imag_ldap.security.user.provider db: @@ -169,7 +171,7 @@ security: ``` yml # app/config/security.yml -providers: [db, ldap] +providers: [db, ldap] ``` ### Subscribe to PRE_BIND event diff --git a/User/LdapUser.php b/User/LdapUser.php index f36de76..2d10200 100644 --- a/User/LdapUser.php +++ b/User/LdapUser.php @@ -8,9 +8,9 @@ class LdapUser implements LdapUserInterface { protected $username, $email, - $roles, + $roles = array(), $dn, - $attributes + $attributes = array() ; public function getRoles()