getEntityManager()->persist($entity); if ($flush) { $this->getEntityManager()->flush(); } } public function remove(Group $entity, bool $flush = false): void { $this->getEntityManager()->remove($entity); if ($flush) { $this->getEntityManager()->flush(); } } /* Déterminer les groupes d'un user SSO en fonction de ses attributs */ public function calculateSSOGroup($user,$attruser) { $groups = $this->_em->getRepository('App\Entity\Group')->findAll(); $retgroups= new ArrayCollection(); foreach($groups as $group) { if($group->getAttributes()) { $attgroup=json_decode($group->getAttributes(),true); foreach($attgroup as $key => $value) { if(array_key_exists($key,$attruser)) { if(is_array($attruser[$key])) { foreach($attruser[$key] as $val) { if($value=="*") $retgroups->add($group); elseif($val==$value) $retgroups->add($group); } } else { if($value=="*") $retgroups->add($group); elseif($value==$attruser[$key]) $retgroups->add($group); } } } } } // Pour chaque groupe de l'utilisateur $usergroups=$user->getGroups(); // On le détache des groupes auxquelles il n'appartient plus if($usergroups) { foreach($usergroups as $usergroup) { if($usergroup->getGroup()->getAttributes()!="") { if(!$retgroups->contains($usergroup->getGroup())) { $user->removeGroup($usergroup); } } } } // On attache le user aux groupes foreach($retgroups as $retgroup) { $usergroup=$this->_em->getRepository('App\Entity\UserGroup')->findBy(["user"=>$user,"group"=>$retgroup]); if(!$usergroup) { $usergroup=new UserGroup(); $usergroup->setUser($user); $usergroup->setGroup($retgroup); $usergroup->setApikey(Uuid::uuid4()); $usergroup->setRolegroup(0); $this->_em->persist($usergroup); $this->_em->flush(); } } return $user; } }