Comment, pour un utilisateur, remonter ses rôles (le rolestatut en fait) et en fonction de la date du jour, cette dernière devant être entre la date début et la date fin contenu dans la table "a pour rôle" pour un rôle donné.
à ce jour si l'utilisateur n'a pas de ligne dans la table "a pour role" la gestion de Symfony est ok
mais si il a une ligne (ou plusieurs) mais avec des dates n'incluant pas la date du jour le(s) role status est(sont) quand même remonté.
Ensuite, si les dates sont bonnes, comment remonter le(s) rolestatut pour une(des) thèques différentes?
il faudrait pouvoir voir les thèques associées aux rôles dans les propriétés du user
et ensuite comment récupérer la données dans un twig ou dans un controller comme on le fait avec is_granted?
merci de vos lumières
Cordialement
PS:
je précise que nous étions deux à développer sur ce projet et que je me retrouve seul. Et je reprend cette partie que mon collègue avait commencé à faire.
Et que l'entité AaReference permet de traduire des libellés via le mécanisme de transtable
/**
* Class AaReference
* @package ******\Entity
*
* @ORM\MappedSuperclass
*/
class AaReference implements Translatable
{
/**
* @var string
*
* @Gedmo\Translatable
* @ORM\Column(name="lib", type="string", length=50, nullable=false)
*/
protected $lib;
/**
* @var \******\Entity\AaRTypeReference
*
* @ORM\ManyToOne(targetEntity="********\Entity\AaRTypeReference")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="typ_ref_id", referencedColumnName="typ_ref_id")
* })
*/
protected $typRef;
/**
* @Gedmo\Locale
* Used locale to override Translation listener`s locale
* this is not a mapped field of entity metadata, just a simple property
* and it is not necessary because globally locale can be set in listener
*/
protected $locale;
/**
* @param $locale
*/
public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
/**
* Set lib
*
* @param string $lib
*
* @return AaReference
*/
public function setLib($lib)
{
$this->lib = $lib;
return $this;
}
/**
* Get lib
*
* @return string
*/
public function getLib()
{
return $this->lib;
}
/**
* Set typRef
*
* @param \******\Entity\AaRTypeReference $typRef
*
* @return AaReference
*/
public function setTypRef(\******\Entity\AaRTypeReference $typRef = null)
{
$this->typRef = $typRef;
return $this;
}
/**
* Get typRef
*
* @return \******\Entity\AaRTypeReference
*/
public function getTypRef()
{
return $this->typRef;
}
}
- Edité par Pecos38 10 janvier 2018 à 8:41:20
Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude (Léonard de Vinci)
On pourrait modifier la fonction GetRole de l'entité AaUtilisateur
public function getRoles()
{
$result = [];
$madatejour = new \DateTime('now');
foreach ($this->authorizations as $authorization) {
if(($madatejour > $authorization->getRolDateDeb()) and ($madatejour < $authorization->getRolDateFin()))
{
$result[] = $authorization->getRole()->getRoleStatus()."_".$authorization->getTeq()->getTeqNom();
}
}
return $result;
}
on aurait donc un(des) role(s) issu(s) de la concaténation de role_status et thèque, à la date du jour
mais je vois des bémols
Le nom de la thèque ne devra comporter que des lettres et des chiffres et tout en majuscule. Mais ça c'est gérable lors de la création et/ou modification de l'entité AaTheque.
Dans l'utilisation de ce rôle dans les is_granted("ROLE_STATUS_THEQUE"), pourra-t-on tester que la 1ere partie de la concaténation et/ou la seconde partie?
Cordialement
Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude (Léonard de Vinci)
Tu as bien vu pour le retour de getRoles(). Symfony ne fait qu'appeler cette méthode, tu peux y mettre ce que tu veux dedans, y compris le test sur la date comme tu l'as fait.
Par contre je n'ai pas bien saisi les "thèques" ? Tu veux qu'un utilisateur puisse avoir accès à certaines thèques seulement ? Dans ce cas, et comment est faite ton application, tu peux utiliser l'annotation Secure. Sur une action de contrôleur :
<?php
class Controller
{
/**
* @Secure("has_role('ROLE_XXX') || user.hasTheque(theque)")
*/
public function xxxAction(Theque $theque)
{
}
}
Dans l'annotation tu as accès à la variable "user" qui est l'utilisateur courant, ainsi que chaque argument de la méthode.
Il faut donc aussi que je rajoute une fonction getTheque et une fonction hasTheque dans mon entite AaUtilisateur.
La getTheque serait comme la getRole sauf que l'on ramene un tableau contenant les teqId
public function getTheque()
{
$result = [];
$madatejour = new \DateTime('now');
foreach ($this->authorizations as $authorization) {
if(($madatejour > $authorization->getRolDateDeb()) and ($madatejour < $authorization->getRolDateFin()))
{
$result[] = $authorization->getTeq()->getTeqId();
}
}
return $result;
}
Avez vous un exemple de fonction hasXXX?
Les Theques je dirais que ce sont des domaines du sites.
De ce côté ce n'est pas encore très clair du côté du client.
Je pense que les roles seront liés aux theques et donc un utilisateur pourra avoir ceci
Role_XXX1 sur une theque A
Role_XXX2 sur une theque B
Role_XXX3 sur la theque A
Etc
Et la il faudrait que chaque role, ramené par ma fonction getRole, contienne un tableau des theque associées.
Est ce possible?
Cordialement
- Edité par Pecos38 20 janvier 2018 à 23:39:37
Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude (Léonard de Vinci)
[symfony 3] role, date et domaine
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude (Léonard de Vinci)
Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude (Léonard de Vinci)
Le souvenir des bienfaits reçus est fragile, comparé à l'ingratitude (Léonard de Vinci)