@@ -760,15 +760,25 @@ public function updateUserObject(&$userObject)
760
760
$ userroles = $ userObject ->getRoles ();
761
761
//remove all mapped roles before
762
762
763
+ $ userroles = $ userObject ->getRoles ();
764
+ //remove all mapped roles before
765
+
766
+ $ oldRoles = array ();
767
+ $ newRoles = array ();
768
+
763
769
if (is_array ($ userroles )) {
764
770
foreach ($ userroles as $ key => $ role ) {
765
771
if ((AuthService::getRole ($ key )) && !(strpos ($ key , $ this ->mappedRolePrefix ) === false )) {
766
- $ userObject ->removeRole ($ key );
772
+ if (isSet ($ matchFilter ) && !preg_match ($ matchFilter , $ key )) continue ;
773
+ if (isSet ($ valueFilters ) && !in_array ($ key , $ valueFilters )) continue ;
774
+ //$userObject->removeRole($key);
775
+ $ oldRoles [$ key ] = $ role ;
767
776
}
768
777
}
769
778
}
770
- $ userObject ->recomputeMergedRole ();
779
+ // $userObject->recomputeMergedRole();
771
780
781
+ // Detect changes
772
782
foreach ($ memberValues as $ uniqValue => $ fullDN ) {
773
783
$ uniqValueWithPrefix = $ rolePrefix . $ uniqValue ;
774
784
if (isSet ($ matchFilter ) && !preg_match ($ matchFilter , $ uniqValueWithPrefix )) continue ;
@@ -779,9 +789,30 @@ public function updateUserObject(&$userObject)
779
789
$ roleToAdd ->setLabel ($ uniqValue );
780
790
AuthService::updateRole ($ roleToAdd );
781
791
}
782
- $ userObject ->addRole ($ roleToAdd );
792
+ $ newRoles [$ roleToAdd ->getId ()] = $ roleToAdd ;
793
+ //$userObject->addRole($roleToAdd);
794
+ }
795
+
796
+ if ((count (array_diff (array_keys ($ oldRoles ), array_keys ($ newRoles ))) > 0 ) ||
797
+ (count (array_diff (array_keys ($ newRoles ), array_keys ($ oldRoles ))) > 0 ) )
798
+ {
799
+ // remove old roles
800
+ foreach ($ oldRoles as $ key => $ role ) {
801
+ if ((AuthService::getRole ($ key )) && !(strpos ($ key , $ this ->mappedRolePrefix ) === false )) {
802
+ $ userObject ->removeRole ($ key );
803
+ }
804
+ }
805
+
806
+ //Add new roles;
807
+ foreach ($ newRoles as $ key => $ role ){
808
+ if ((AuthService::getRole ($ key )) && !(strpos ($ key , $ this ->mappedRolePrefix ) === false )) {
809
+ $ userObject ->addRole ($ role );
810
+ }
811
+ }
812
+ $ userObject ->recomputeMergedRole ();
783
813
$ changes = true ;
784
814
}
815
+
785
816
} else {
786
817
foreach ($ entry [$ key ] as $ uniqValue ) {
787
818
if (isSet ($ matchFilter ) && !preg_match ($ matchFilter , $ uniqValue )) continue ;
0 commit comments