resolution attribut sso en tableau

This commit is contained in:
afornerot 2020-09-30 13:55:31 +02:00
parent 21295df381
commit 923c6c0b42
7 changed files with 108 additions and 31 deletions

View File

@ -28,7 +28,7 @@ class SecurityController extends Controller
$masteridentity=$this->getParameter("masteridentity"); $masteridentity=$this->getParameter("masteridentity");
// Init Client CAS // Init Client CAS
\phpCAS::setDebug(false); \phpCAS::setDebug("/var/log/phpcas/phpCAS-ninegate.log");
\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false); \phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false);
\phpCAS::setNoCasServerValidation(); \phpCAS::setNoCasServerValidation();
@ -42,12 +42,6 @@ class SecurityController extends Controller
// Récupération Attribut // Récupération Attribut
$attributes = \phpCAS::getAttributes(); $attributes = \phpCAS::getAttributes();
// Suppression des Attributs en tableaux
foreach ($attributes as $key => $value) {
if(is_array($value))
unset($attributes[$key]);
}
// Rechercher l'utilisateur // Rechercher l'utilisateur
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
if(isset($attributes[$this->getParameter('user_attr_cas_username')])) if(isset($attributes[$this->getParameter('user_attr_cas_username')]))
@ -62,6 +56,7 @@ class SecurityController extends Controller
if(isset($attributes[$this->getParameter('user_attr_cas_firstname')])) if(isset($attributes[$this->getParameter('user_attr_cas_firstname')]))
$firstname = $attributes[$this->getParameter('user_attr_cas_firstname')]; $firstname = $attributes[$this->getParameter('user_attr_cas_firstname')];
$user = $em->getRepository('CadolesCoreBundle:User')->findOneBy(array("username"=>$username)); $user = $em->getRepository('CadolesCoreBundle:User')->findOneBy(array("username"=>$username));
$exists = $user ? true : false; $exists = $user ? true : false;
@ -108,7 +103,8 @@ class SecurityController extends Controller
$em->flush(); $em->flush();
// On calcule les groupes de l'utilisateur // On calcule les groupes de l'utilisateur
$groups=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes); $user=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
} }
} }
else { else {
@ -122,14 +118,15 @@ class SecurityController extends Controller
// On s'assure que le niveau 02 appartient bien au niveau 01 calculé // On s'assure que le niveau 02 appartient bien au niveau 01 calculé
$sameniveau01=(!is_null($user->getNiveau02())&&$niveau01==$user->getNiveau02()->getNiveau01()); $sameniveau01=(!is_null($user->getNiveau02())&&$niveau01==$user->getNiveau02()->getNiveau01());
// On calcule les groupes de l'utilisateur
$user=$groups=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
$user->setLastname($lastname); $user->setLastname($lastname);
$user->setFirstname($firstname); $user->setFirstname($firstname);
$user->setEmail($email); $user->setEmail($email);
if(!$sameniveau01) $user->setNiveau02(null); if(!$sameniveau01) $user->setNiveau02(null);
// On calcule les groupes de l'utilisateur
$user=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
$em->persist($user); $em->persist($user);
$em->flush(); $em->flush();
} }
@ -179,4 +176,37 @@ class SecurityController extends Controller
$url=$this->generateUrl('cadoles_core_home', array(), UrlGeneratorInterface::ABSOLUTE_URL); $url=$this->generateUrl('cadoles_core_home', array(), UrlGeneratorInterface::ABSOLUTE_URL);
\phpCAS::logout(array("service"=>$url)); \phpCAS::logout(array("service"=>$url));
} }
public function testAction() {
$em = $this->getDoctrine()->getManager();
// Init Client CAS
\phpCAS::setDebug("/var/log/phpcas/phpCAS-ninegate.log");
\phpCAS::client(CAS_VERSION_2_0, $this->getParameter('cas_host'), $this->getParameter('cas_port'), is_null($this->getParameter('cas_path')) ? '' : $this->getParameter('cas_path'), false);
\phpCAS::setNoCasServerValidation();
// Authentification
\phpCAS::forceAuthentication();
// Récupération UID
$username = \phpCAS::getUser();
// Récupération Attribut
$attributes = \phpCAS::getAttributes();
$user = $em->getRepository('CadolesCoreBundle:User')->findOneBy(array("username"=>$username));
$niveau01=$em->getRepository('CadolesCoreBundle:Niveau01')->calculateNiveau01($attributes);
$user=$em->getRepository('CadolesCoreBundle:Group')->calculateGroup($user,$attributes);
return $this->render('CadolesCASBundle:Test:test.html.twig',[
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'attributes' => $attributes,
'user' => $user,
'username' => $username,
'niveau01' => $niveau01,
]);
}
} }

View File

@ -6,3 +6,7 @@ cas_sp.logout:
path: /logout path: /logout
defaults: { _controller: CadolesCASBundle:Security:logout } defaults: { _controller: CadolesCASBundle:Security:logout }
cas_sp.test:
path: /test
defaults: { _controller: CadolesCASBundle:Security:test }

View File

@ -0,0 +1,35 @@
{% extends '@CadolesCore/base.html.twig' %}
{% block pagewrapper %}
<h1>TEST SSO</h1>
<h2>Atttribut SSO</h2>
{% for key, attribute in attributes %}
{% if attribute is iterable %}
{% for value in attribute %}
<strong>{{ key }}</strong> = {{ value }}<br>
{% endfor %}
{% else %}
<strong>{{ key }}</strong> = {{ attribute }}<br>
{% endif %}
{% endfor %}
<h2>Correspondance Utilisateur Ninegate</h2>
<strong>username</strong> = {{ user.username }}<br>
<strong>firstname</strong> = {{ user.firstname }}<br>
<strong>lastname</strong> = {{ user.lastname }}<br>
<strong>email</strong> = {{ user.email }}<br>
<h2>Appartient au Niveau 01</h2>
<strong>{{ niveau01.label }}</strong> = {{ niveau01.attributes }}
<h2>Appartient aux Groupes</h2>
{% for usergroup in user.groups %}
{% if not usergroup.group.attributes is empty %}
<strong>{{usergroup.group.label}}</strong> = {{usergroup.group.attributes}}<br>
{% endif %}
{% endfor %}
<br><br><br><br><br><br><br>
{% endblock %}

View File

@ -151,6 +151,20 @@ class InitDataCommand extends ContainerAwareCommand
} }
} }
// On s'assure si masteridentity est à SSO qu'au minimum un niveau01 possède un attribut
if($masteridentity=="SSO") {
$niveau01=$em->createQueryBuilder()->select('n')->from('CadolesCoreBundle:Niveau01','n')->where('n.attributes IS NOT NULL')->getQuery()->getResult();
if(!$niveau01) {
// Si ce n'est pas le cas on positionne un attribut ultra large sur le niveau01 de base
$niveau01=$group=$em->getRepository('CadolesCoreBundle:Niveau01')->find(-100);
$niveau01->setAttributes('{"username":"*"}');
$em->persist($niveau01);
$em->flush();
}
}
$output->writeln(''); $output->writeln('');
} }

View File

@ -21,15 +21,15 @@ class GroupRepository extends \Doctrine\ORM\EntityRepository
foreach($attgroup as $key => $value) { foreach($attgroup as $key => $value) {
if(array_key_exists($key,$attruser)) { if(array_key_exists($key,$attruser)) {
if(is_array($value)) { if(is_array($attruser[$key])) {
foreach($value as $val) { foreach($attruser[$key] as $val) {
if($val=="*") if($value=="*")
$retgroups->add($group); $retgroups->add($group);
elseif($val==$attruser[$key]) elseif($val==$value)
$retgroups->add($group); $retgroups->add($group);
} }
} }
elseif(array_key_exists($key,$attruser)) { else {
if($value=="*") if($value=="*")
$retgroups->add($group); $retgroups->add($group);
elseif($value==$attruser[$key]) elseif($value==$attruser[$key])

View File

@ -15,15 +15,15 @@ class Niveau01Repository extends \Doctrine\ORM\EntityRepository
foreach($attniveau as $key => $value) { foreach($attniveau as $key => $value) {
if(array_key_exists($key,$attruser)) { if(array_key_exists($key,$attruser)) {
if(is_array($value)) { if(is_array($attruser[$key])) {
foreach($value as $val) { foreach($attruser[$key] as $val) {
if($val=="*") if($value=="*")
return $niveau01; return $niveau01;
elseif($val==$attruser[$key]) elseif($val==$value)
return $niveau01; return $niveau01;
} }
} }
else if(array_key_exists($key,$attruser)) { else {
if($value=="*") if($value=="*")
return $niveau01; return $niveau01;
elseif($value==$attruser[$key]) elseif($value==$attruser[$key])

View File

@ -1,14 +1,8 @@
[user] [attributes]
user=uid user=uid
[username]
username=uid username=uid
[firstname]
firstname=givenName firstname=givenName
[lastname]
lastname=sn lastname=sn
[email]
email=mail email=mail
user_groups=user_groups