Skip to content
This repository was archived by the owner on Nov 25, 2020. It is now read-only.

Commit d87af78

Browse files
committed
Fix mapping to role id
1 parent 208838a commit d87af78

File tree

1 file changed

+57
-17
lines changed

1 file changed

+57
-17
lines changed

core/src/plugins/auth.ldap/class.ldapAuthDriver.php

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -760,19 +760,16 @@ public function updateUserObject(&$userObject)
760760
$userroles = $userObject->getRoles();
761761
//remove all mapped roles before
762762

763-
$userroles = $userObject->getRoles();
764-
//remove all mapped roles before
765-
766763
$oldRoles = array();
767764
$newRoles = array();
768765

769766
if (is_array($userroles)) {
770-
foreach ($userroles as $key => $role) {
771-
if ((AuthService::getRole($key)) && !(strpos($key, $this->mappedRolePrefix) === false)) {
772-
if (isSet($matchFilter) && !preg_match($matchFilter, $key)) continue;
773-
if (isSet($valueFilters) && !in_array($key, $valueFilters)) continue;
767+
foreach ($userroles as $rkey => $role) {
768+
if ((AuthService::getRole($rkey)) && !(strpos($rkey, $this->mappedRolePrefix) === false)) {
769+
if (isSet($matchFilter) && !preg_match($matchFilter, $rkey)) continue;
770+
if (isSet($valueFilters) && !in_array($rkey, $valueFilters)) continue;
774771
//$userObject->removeRole($key);
775-
$oldRoles[$key] = $role;
772+
$oldRoles[$rkey] = $role;
776773
}
777774
}
778775
}
@@ -797,30 +794,73 @@ public function updateUserObject(&$userObject)
797794
(count(array_diff(array_keys($newRoles), array_keys($oldRoles))) > 0) )
798795
{
799796
// remove old roles
800-
foreach ($oldRoles as $key => $role) {
801-
if ((AuthService::getRole($key)) && !(strpos($key, $this->mappedRolePrefix) === false)) {
802-
$userObject->removeRole($key);
797+
foreach ($oldRoles as $rkey => $role) {
798+
if ((AuthService::getRole($rkey)) && !(strpos($rkey, $this->mappedRolePrefix) === false)) {
799+
$userObject->removeRole($rkey);
803800
}
804801
}
805802

806803
//Add new roles;
807-
foreach($newRoles as $key => $role){
808-
if ((AuthService::getRole($key)) && !(strpos($key, $this->mappedRolePrefix) === false)) {
804+
foreach($newRoles as $rkey => $role){
805+
if ((AuthService::getRole($rkey)) && !(strpos($rkey, $this->mappedRolePrefix) === false)) {
809806
$userObject->addRole($role);
810807
}
811808
}
812809
$userObject->recomputeMergedRole();
813810
$changes = true;
814811
}
815812

816-
} else {
813+
} else { // Others attributes mapping
814+
$oldRoles = array();
815+
$newRoles = array();
816+
$userroles = $userObject->getRoles();
817+
818+
// Get old roles
819+
if (is_array($userroles)) {
820+
foreach ($userroles as $rkey => $role) {
821+
if ((AuthService::getRole($rkey)) && (strpos($rkey, $this->mappedRolePrefix) === false)) {
822+
if (isSet($matchFilter) && !preg_match($matchFilter, $rkey)) continue;
823+
if (isSet($valueFilters) && !in_array($rkey, $valueFilters)) continue;
824+
//$userObject->removeRole($key);
825+
$oldRoles[$rkey] = $rkey;
826+
}
827+
}
828+
}
829+
830+
// Get new roles
817831
foreach ($entry[$key] as $uniqValue) {
818832
if (isSet($matchFilter) && !preg_match($matchFilter, $uniqValue)) continue;
819833
if (isSet($valueFilters) && !in_array($uniqValue, $valueFilters)) continue;
820-
if ((!in_array($uniqValue, array_keys($userObject->getRoles()))) && !empty($uniqValue)) {
821-
$userObject->addRole(AuthService::getRole($uniqValue, true));
822-
$changes = true;
834+
if (!empty($uniqValue)) {
835+
$roleToAdd = AuthService::getRole($uniqValue);
836+
if($roleToAdd === false){
837+
$roleToAdd = AuthService::getRole($uniqValue, true);
838+
$roleToAdd->setLabel($uniqValue);
839+
AuthService::updateRole($roleToAdd);
840+
}
841+
//$userObject->addRole(AuthService::getRole($uniqValue, true));
842+
//$changes = true;
843+
$newRoles[$uniqValue] = $roleToAdd;
844+
}
845+
}
846+
847+
// Do the sync if two sets of roles are different
848+
if ( (count(array_diff(array_keys($oldRoles), array_keys($newRoles))) > 0) ||
849+
(count(array_diff(array_keys($newRoles), array_keys($oldRoles))) > 0)){
850+
// remove old roles
851+
foreach ($oldRoles as $rkey => $role) {
852+
if ((AuthService::getRole($rkey)) && (strpos($rkey, $this->mappedRolePrefix) === false)) {
853+
$userObject->removeRole($rkey);
854+
}
823855
}
856+
//Add new roles;
857+
foreach($newRoles as $rkey => $role){
858+
if ((AuthService::getRole($rkey)) && (strpos($rkey, $this->mappedRolePrefix) === false)) {
859+
$userObject->addRole($role);
860+
}
861+
}
862+
$userObject->recomputeMergedRole();
863+
$changes = true;
824864
}
825865
}
826866
break;

0 commit comments

Comments
 (0)