Problèmes à l'utilisation des ACL dans un composant

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Problème] Problèmes à l'utilisation des ACL dans un composant

    Bonjour à tous.

    J’ai besoin d’avoir une gestion des ACL différente pour plusieurs vues d’un composant et je ne trouve pas vraiment de documentation sur ce sujet.

    J’ai d’abord crée une section ‘mavue1’ dans le acces.xml avec les actions ‘classiques’ core.edit, core.create, etc…

    Code:
    <access component="com_moncomposant">
    	<section name="component">
    		<action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
    		<action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" />
    		<action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" />
    		<action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" />
    		<action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" />
    		<action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" />
    		<action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" />
    	</section>
    	<section name="mavue1">
    		<action name="core.create" title="JACTION_CREATE" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_CREATE_DESC" />
    		<action name="core.delete" title="JACTION_DELETE" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_DELETE_DESC" />
    		<action name="core.edit" title="JACTION_EDIT" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_EDIT_DESC" />
    		<action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_EDITSTATE_DESC" />
    		<action name="core.edit.own" title="JACTION_EDITOWN" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_EDITOWN_DESC" />
    	</section>

    J’ai donc aussi crée un nouvel onglet dans le config.xml :

    Code:
    	<fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC">
    		<field
    			name="rules"
    			type="rules"
    			label="JCONFIG_PERMISSIONS_LABEL"
    			class="inputbox"
    			validate="rules"
    			filter="rules"
    			component="com_moncomposant"
    			section="component"
    		/>
    	</fieldset>
    
    	<fieldset name="permissions_mavue1" label="COM_MONCOMPOSANT_MAVUE1_CONFIG_PERMISSIONS_LABEL" description="COM_MONCOMPOSANT_MAVUE1_CONFIG_PERMISSIONS_DESC">
    		<field
    			name="rules"
    			type="rules"
    			label="COM_MONCOMPOSANT_MAVUE1_CONFIG_PERMISSIONS_LABEL"
    			class="inputbox"
    			validate="rules"
    			filter="rules"
    			component="com_moncomposant"
    			section="mavue1"
    		/>
    	</fieldset>
    Mais à la validation des paramètres, quand on autorise une action, il se passe un truc bizarre !

    Après validation de l’autorisation dans la section ‘mavue1’ : l’autorisation est affectée au niveau du composant, et se transforme en ‘hérité’ au niveau de la section 'mavue1' ??

    Histoire de contourner ce problème, j’ai essayé en créant des actions spécifiques à la vue mavue1.edit, mavue1.create, etc…

    Ce qui ne m'arrange pas vraiment car je ne bénéficie pas des héritages globaux.

    Code:
    <access component="com_moncomposant">
    	<section name="component">
    		<action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
    		<action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" />
    		<action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" />
    		<action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" />
    		<action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" />
    		<action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" />
    		<action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" />
    	</section>
    	<section name="mavue1">
    		<action name="mavue1.create" title="JACTION_CREATE" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_CREATE_DESC" />
    		<action name="mavue1.delete" title="JACTION_DELETE" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_DELETE_DESC" />
    		<action name="mavue1.edit" title="JACTION_EDIT" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_EDIT_DESC" />
    		<action name="mavue1.edit.state" title="JACTION_EDITSTATE" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_EDITSTATE_DESC" />
    		<action name="mavue1.edit.own" title="JACTION_EDITOWN" description="COM_MONCOMPOSANT_MAVUE1_ACCESS_EDITOWN_DESC" />
    	</section>
    Là, je me heure à une autre problème.

    La méthode edit de la classe JControllerForm vérifie les droits core.edit du composant et il est impossible de paramétrer ce contrôle à priori.

    Je suis donc obligé de surcharger la classe et la méthode edit et certainement les autres aussi, ce qui me parait assez aberrent et fait perdre partiellement l’intérêt d’utiliser les classes JForm.

    Si quelqu’un a une idée sur ces 2 points je suis preneur.

    Merci d’avance.
    Dernière édition par roland_d_alsace à 23/04/2017, 10h31
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

  • #2
    Re : Problèmes à l'utilisation des ACL dans un composant

    Le problème de mauvaise affectation de la règle (1er point) est probablement liée au fait que dans le config.xml, les 2 champs ont le même nom 'rules' (bien qu'étant dans des fieldsets différents).
    Je ferai le test demain.
    Dernière édition par roland_d_alsace à 23/04/2017, 10h46
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3
      Re : Problèmes à l'utilisation des ACL dans un composant

      Bon le test ne fonctionne pas, ce n'est pas la duplicité du name="rules" qui posait un problème.

      Il semblerait que je doive bien utiliser la 2ème méthode.

      J'ai trouvé sur un autre site une autre discussion sur ce thème, et il semble bien que la conclusion soit la même que la mienne et qu'on ne peut avoir plusieurs règles d'ACL de type "core" dans un composant.

      Il faut donc bien définir des règles d'action particulières pour chaque vue avec les restrictions et les contraintes que cela impose (pas d'héritage).

      Personne n'a jamais eu ce besoin ?
      Dernière édition par roland_d_alsace à 24/04/2017, 16h24
      A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
      Rejoignez le Joomla Users Groupe Alsace...
      roland_d_alsace va-t-il devenir roland_du_grand_est ?

      Commentaire


      • #4
        Re : Problèmes à l'utilisation des ACL dans un composant

        Allez hop, je me répond tout seul, cela servira peut-être à quelqu'un. un jour

        En 3.6 je déconseille de créer des droits dans une section spécifique du access.xml (et donc aussi du config.xml -ce qui revient à avoir un onglet séparé au niveau des paramètres du composant-).

        Il doit y avoir un bug car l'enregistrement ne se fait pas correctement au niveau des paramètres.
        Une autorisation, se transforme en 'hérité / autorisé'.
        Hormis ce point cela semble fonctionner.

        Il faut donc rajouter des règles spécifiques à chaque vue dans la section components du access.xml (ce qui fait un onglet 'droits' à rallonge dans les paramètres du composant).

        Dans tous les cas on perd de ce fait la notion d'héritage, vu que les règles mavue1.create, mavue1.delete, etc... ne sont pas connues dans une hiérarchie 'supérieure'.

        Pour utiliser ces règles spécifique avec un controller dérivé de JControllerForm, il faut bien redéfinir les méthodes allowAdd et allowEdit dans le controller en question.

        Il faut aussi bien redéfinir les méthodes canDelete et CanEditState dans le model dérivé de JModelAdmin et utilisé dans la vue.

        Ceci solutionne le problème que j'évoque en fin de mon premier message de ce fil, où je n'avais pas encore trouvé d'autre solution que de surcharger le méthode 'edit', de la classe JcontrollerForm, ce qui ne me convenait pas car cela ne me semblait 'pas propre' au niveau du code.

        Je testerai avec la 3.7 si le problème évoqué dans les premiers alinéas de cette réponse est résolu, sinon j'ouvrirai une requette dans le bug tracker.

        Voili, voilà.

        Bon dev à tous.
        Dernière édition par roland_d_alsace à 25/04/2017, 18h37
        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
        Rejoignez le Joomla Users Groupe Alsace...
        roland_d_alsace va-t-il devenir roland_du_grand_est ?

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X