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
        1 sur 2 < >

        C'est [Réglé] et on n'en parle plus ?

        A quoi ça sert ?
        La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

        Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

        Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
        Comment ajouter la mention [Réglé] à votre discussion ?
        1 - Aller sur votre discussion et éditer votre premier message :


        2 - Cliquer sur la liste déroulante Préfixe.

        3 - Choisir le préfixe [Réglé].


        4 - Et voilà… votre discussion est désormais identifiée comme réglée.

        2 sur 2 < >

        Assistance au forum - Outil de publication d'infos de votre site

        Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

        Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

        Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

        UTILISER À VOS PROPRES RISQUES :
        L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

        Problèmes connus :
        FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

        Installation :

        1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

        Archive zip : https://github.com/AFUJ/FPA/zipball/master

        2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

        3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

        4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

        5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

        6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
        et remplacer www. votresite .com par votre nom de domaine


        Exemples:
        Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
        Télécharger le script fpa-fr.php dans: /public_html/
        Pour executer le script: http://www..com/fpa-fr.php

        Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
        Télécharger le script fpa-fr.php dans: /public_html/cms/
        Pour executer le script: http://www..com/cms/fpa-fr.php

        En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

        Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
        Voir plus
        Voir moins

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X