Main menu

Forum


× Forum d'aide en Français

Modification comportement ACL entre J!3 et J!4

  • web.academie@denikol.fr
  • Auteur du sujet
  • Nouveau membre
  • Nouveau membre
Plus d'informations
il y a 6 mois 5 jours #18402 par web.academie@denikol.fr
Modification comportement ACL entre J!3 et J!4 a été créé par web.academie@denikol.fr
Bonjour Je suis en cours de migration d'un un site J3 vers J4

L'état des lieux
J'utilise Icagenda pour publier des événements qui, pour certains, utilisent la fonction inscriptions destinée au public (inscription sans identification)
Les événements sont classés par catégorie, et il existe un "référent" par catégorie qui est maitre de ses événements et des inscriptions du public.
Afin de permettre aux référents la gestion de leur calendrier, je n'ai pas eu d'autre choix que de laisser un accès restreint coté backend.
Chaque référent peut donc créer, et modifier SES événements et gérer ses inscriptions ( exportation csv).

La pré-migration sur un site de dev
Tout ceci fonctionnait très bien en J!3, mais le comportement semble changer en J!4

En effet la "modification de ses éléments"  pour un groupe d’utilisateur (Le groupe de référents) ne semble plus fonctionner correctement :Un événement créé par un référent (qui n'est pas superuser) ne peut pas être modifié par ce même utilisateur. 
idem pour l’accès aux inscriptions. Il ne voit QUE les  inscriptions des événements qu'il gère, mais ne peut pas les éditer. 

Il faut leur donner l'autorisation "modifier" pour qu'il puissent modifier les événementset éditer les inscriptions, mais dans ce cas il peuvent avoir accès a TOUS les événements, et ce n'est pas ce que je veux.j’ai du louper quelque chose

Alternative possible:
Un accès à toutes ces fonctionnalités en front-end est envisageable (version pro >3.8 ) (ce qui éviterait le backend..) mais avant de l'acquérir, je n'ai pas trouvé d'informations détaillées sur cette fonctionnalité, pour savoir s'il elle répondait à mon besoin (éditions inscriptions, mailling aux inscrits, filtrage, etc)

S'il y avait un site démo de la version pro, ce serait super.

Quoiqu'il en soit je re-nouvelle mes félicitations pour ce module de calendrier que j'utilise depuis bientôt 8 ans.

Denis

Connexion ou Créer un compte pour participer à la conversation.

  • web.academie@denikol.fr
  • Auteur du sujet
  • Nouveau membre
  • Nouveau membre
Plus d'informations
il y a 6 mois 4 jours #18403 par web.academie@denikol.fr
Réponse de web.academie@denikol.fr sur le sujet Modification comportement ACL entre J!3 et J!4
Bonjour Cyril,
Comme demandé, j'ajoute des copies d'écrans pour analyse.

Cordialement
Denis
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

  • Lyr!C
  • Portrait de Lyr!C
  • Administrateur
  • Administrateur
  • Lead Developer
Plus d'informations
il y a 6 mois 4 jours - il y a 6 mois 3 jours #18404 par Lyr!C
Réponse de Lyr!C sur le sujet Modification comportement ACL entre J!3 et J!4
Bonjour,

Effectivement, je confirme le problème sous J4/J5

Ceci seulement côté admin, car le contrôle ACL est correct côté frontal du site.

Je vais prévoir le correctif pour la version 3.9 (janvier).

En attendant, vous pouvez éditer le fichier administrator/components/com_icagenda/src/Controller/EventController.php

Après la ligne :
use VersionableControllerTrait;

Ajouter ceci :
protected function allowEdit($data = [], $key = 'id')
{
    $recordId = (int) isset($data[$key]) ? $data[$key] : 0;
    $user = $this->app->getIdentity();

    // Zero record (id:0), return component edit permission by calling parent controller method
    if (!$recordId) {
        return parent::allowEdit($data, $key);
    }

    // Check edit on the record asset (explicit or inherited)
    if ($user->authorise('core.edit', 'com_icagenda.event.' . $recordId)) {
        return true;
    }

    // Check edit own on the record asset (explicit or inherited)
    if ($user->authorise('core.edit.own', 'com_icagenda.event.' . $recordId)) {
        // Existing record already has an owner, get it
        $record = $this->getModel()->getItem($recordId);

        if (empty($record)) {
            return false;
        }

        // Grant if current user is owner of the record
        return $user->id == $record->created_by;
    }

    return false;
}

Ceci corrigera pour l'édition des évènements côté admin.

Merci de ce retour !

Bien cordialement,
Cyril
 

Latest version : iCagenda 3.9.4
We recommend every user to keep iCagenda updated.
Don't forget to have your Joomla!™ up-to-date!

Do you like iCagenda?
I would appreciate if you could take 5 minutes to post a review on JED (Joomla Extensions Directory) .

Fichier attaché :

Dernière édition: il y a 6 mois 3 jours par Lyr!C.

Connexion ou Créer un compte pour participer à la conversation.

  • web.academie@denikol.fr
  • Auteur du sujet
  • Nouveau membre
  • Nouveau membre
Plus d'informations
il y a 6 mois 3 jours #18406 par web.academie@denikol.fr
Réponse de web.academie@denikol.fr sur le sujet Modification comportement ACL entre J!3 et J!4
Bonjour Cyril
Votre modification fonctionne ... enfin presque!

Pour éviter l'erreur  :
syntax error, unexpected token ","

en effet j'ai dû remplacer la ligne 34protected function allowEdit($data = , $key = 'id')
par 
protected function allowEdit($data = array(), $key = 'id')

et les événements sont éditables. Merci

En revanche, le problème est toujours présent sur les inscriptions, et je n'ai pas réussi à le résoudre en adaptant votre fonction dans \RegistrationController.php.

Cordialement
Denis
 

Connexion ou Créer un compte pour participer à la conversation.

  • web.academie@denikol.fr
  • Auteur du sujet
  • Nouveau membre
  • Nouveau membre
Plus d'informations
il y a 6 mois 3 jours #18407 par web.academie@denikol.fr
Réponse de web.academie@denikol.fr sur le sujet Modification comportement ACL entre J!3 et J!4
Rectificatif:
avec votre ligne 34 d'origine j'ai une erreur à l'édition de l'événement

Avec ma modification, je n'ai plus l'erreur mais désormais j'ai de nouveau le message 'Edition non permise' en rouge.

Cordialement
Denis

Connexion ou Créer un compte pour participer à la conversation.

  • Lyr!C
  • Portrait de Lyr!C
  • Administrateur
  • Administrateur
  • Lead Developer
Plus d'informations
il y a 6 mois 3 jours #18408 par Lyr!C
Réponse de Lyr!C sur le sujet Modification comportement ACL entre J!3 et J!4
Bonjour,

Effectivement, j'avais oublié l'array vide par défaut dans la fonction.

Par contre, de mon côté, avec le code corrigé, cela fonctionne.

Pour les inscriptions, vous avez remplacé "com_icagenda.event" par "com_icagenda.registration" ?

Bien cordialement,
Cyril

Latest version : iCagenda 3.9.4
We recommend every user to keep iCagenda updated.
Don't forget to have your Joomla!™ up-to-date!

Do you like iCagenda?
I would appreciate if you could take 5 minutes to post a review on JED (Joomla Extensions Directory) .

Fichier attaché :

Connexion ou Créer un compte pour participer à la conversation.

  • web.academie@denikol.fr
  • Auteur du sujet
  • Nouveau membre
  • Nouveau membre
Plus d'informations
il y a 6 mois 3 jours #18410 par web.academie@denikol.fr
Réponse de web.academie@denikol.fr sur le sujet Modification comportement ACL entre J!3 et J!4
Bonsoir
re-rectificatif, pour les événements c'est OK (un espace de trop dans le code php ..)

pour les inscriptions :
j'ai trouvé:
j'avais effectivement modifié les .event en .registration, mais la comparaison se faisant sur le created_by,et celui-ci étant anonyme, ca ne fonctionnait pas.

en effet, en J3, j'ai une tache périodique sql qui met a jour le userid de l'inscription avec le userid de l'évènement associé pour que le propriétaire de l'événement soit le propriétaire de l'inscription et puisse y accéder.

Il semble qu'en J4, (avec votre code en tout cas) ce soit le champ created_by qu'il faille mettre à jour.
je vais modifier ma requête SQL en ce sens.

Merci pour le dépannage
Joyeuses fêtes de fin d'année

Denis

Connexion ou Créer un compte pour participer à la conversation.

  • Lyr!C
  • Portrait de Lyr!C
  • Administrateur
  • Administrateur
  • Lead Developer
Plus d'informations
il y a 6 mois 1 jour #18413 par Lyr!C
Réponse de Lyr!C sur le sujet Modification comportement ACL entre J!3 et J!4
Bonjour,
En effet, pour les inscriptions, il faut quelques ajustements (car il n'y a pas obligatoirement un "propriétaire" selon les paramètres).

Il faudrait utiliser ceci:
// Grant if current user is owner of the record
if ($user->id == $record->created_by || $user->id == $record->userid) {
    return true;
}

Par contre, pour votre cas spécifique, cela s'inscrit dans une possible nouvelle option pour autoriser aussi le créateur d'un évènement d'éditer les inscriptions à celui-ci.
Cela sans besoin d'une requête SQL perso, et qui plus est, il est préférable de ne pas modifier userid ni created_by qui sont censés être liés à l'utilisateur inscrit et non le créateur de l'évènement.
L'idée est intéressante, dont je vais travailler dessus ! ;-)

Bien cordialement,
Cyril

 

Latest version : iCagenda 3.9.4
We recommend every user to keep iCagenda updated.
Don't forget to have your Joomla!™ up-to-date!

Do you like iCagenda?
I would appreciate if you could take 5 minutes to post a review on JED (Joomla Extensions Directory) .

Fichier attaché :

Connexion ou Créer un compte pour participer à la conversation.

Modérateurs: Lyr!C
Temps de génération de la page : 0.235 secondes

Follow Us

Créez vos templates Joomla avec Template Creator CK

acymailing logo new