Annotation de classe @filter
-
Défini une méthode de filtrage pour la classe.
/** * @filter filterMethod [for_use|for_view|none_for_all][,another_option...] */
Cette méthode sera appelée par certaines vues pour filtrer la liste des objets de cette classe qui peuvent être affichés dans le contexte de ces vues :
- Depuis la vue liste : si l’option
for_view
est demandée
- Depuis la sélection combo : si l’optionfor_use
est demandée
- L’option spécialenone_for_all
signifie que si aucune valeur ne correspond au critère de filtre, il faudra considérer qu’il n’y a pas de filtre et qu’il faut renvoyer toutes les valeurs : elle signifie “pas de valeur = on ne filtre pas”.À défaut de préciser les options de filtrage, le paramétrage
for_use, for_view
s’appliquera automatiquement.Contrairement à l’annotation de propriété @filters, ce mode de filtration des objets est fixé pour la classe : il ne dépend pas de la valeur courante de propriétés de l’objet depuis lequel on veut récupérer des données en sélection combo de cette classe.
Exemple
Si l’on veut pouvoir affecter un caractère confidentiel à un objet, on peut lui assigner ce trait
Has_Confidential
:/** * @filter filterConfidential */ trait Has_Confidential { //--------------------------------------------------------------------------------- $confidential /** * @var boolean */ public $confidential = false; //---------------------------------------------------------------------------- filterConfidential /** * @return array Filtered seach criteria */ public static function filterConfidential() : array { return ['confidential' => false]; }
Ici :
- L’option d’application n’étant pas précisée, la limitation de consultation s’appliquera aussi bien pour les listes que pour les sélections combo : seuls les objets pour lequels
$confidential
n’est pas coché pourront s’afficher dans ces vues.
- Pour permettre à certains utilisateurs, ayant des accès avancés, de voir les données confidentielles, il suffira de rajouter un contrôle de droit d’accès dans la méthodefilterConfidential
, pour n’ajouter le filtre qu’aux utilisateurs n’ayant pas ces droits.
- Attention : pour éviter un accès direct aux vues d’objets confidentiels (output, edit, ou d’autres vues), mieux vaut y adjoindre une annotation de propriété @data_access_control pour filtrer tout accès direct à l’objet. L’annotation @filter@ ne sécurise en effet que les vues liste et sélection combo.Voir aussi
- Annotation de propriété @filters : pour filtrer dynamiquement une sélection combo en fonction de valeurs de propriétés