Surveillez et contrôlez les activités des utilisateurs avec le composant Journal des actions utilisateur. Cette section détaille comment activer la journalisation, consulter les journaux et configurer les paramètres afin de suivre les modifications effectuées par les utilisateurs, ce qui contribue à la sécurité et à la responsabilisation.

Introduction

Le composant Journal des actions utilisateur (com_actionlogs) fournit une infrastructure permettant de créer un journal d'audit des activités du site. Les actions qui sont enregistrées peuvent être réglées finement par l'administrateur du site. Des extensions tierces peuvent se connecter au composant pour ajouter des messages personnalisés ou faire en sorte que le système traite les actions administrateur standard.

Remarque : Seuls les Super Utilisateurs ont accès au composant Journal des actions utilisateur.

Journal des actions utilisateur

Pour afficher la liste du Journal des actions utilisateur :

  • Sélectionner Utilisateurs → Journal des actions utilisateur depuis le menu Administration.

user actions log list page

Depuis cette page, un Super Utilisateur a une vue d'ensemble globale de toutes les activités utilisateur effectuées sur un site.

  • Exporter la sélection au format CSV : ce bouton exporte uniquement les éléments sélectionnés dans la liste visible.
  • Exporter tout au format CSV : ce bouton exporte tous les enregistrements. Les filtres sont ignorés.
  • Supprimer : ce bouton supprime les éléments sélectionnés.
  • Vider le journal : ce bouton supprime toutes les entrées du journal.
  • Paramètres : un formulaire de configuration permettant de définir les options de journalisation.

Paramètres

Le formulaire Journal des actions utilisateur : Paramètres permet au Super Utilisateur de sélectionner les événements à journaliser et de choisir d'inclure ou non les adresses IP dans les données du journal.

user actions log options page

Plugins

Le système de journalisation des actions utilise un certain nombre de plugins :

Journal des actions - Joomla

Lorsqu'il est activé, ce plugin enregistre les actions principales des utilisateurs, y compris des actions telles que la connexion/déconnexion, la mise à jour d'un article, l'ajout d'un module. Le plugin n'a aucun paramètre,

Système - Journal des actions de l'utilisateur

Lorsqu'il est activé, ce plugin définit le nombre de jours après lequel les journaux seront supprimés. Une valeur de zéro signifie que les journaux ne sont jamais supprimés automatiquement.

Confidentialité - Journaux des actions

Lorsqu'il est activé, ce plugin exporte les données du journal des actions pour une demande d'informations d'un utilisateur.

Module Dernières actions

Ce module est affiché uniquement pour les Super Utilisateurs dans le Panneau d'administration.

user actions log module

Comment connecter une extension au système

N'hésitez pas à modifier cette section en l'améliorant ou en la corrigeant.

Script d'installation du composant

Ajoutez l'extension à la table (#__action_logs_extensions) afin qu'elle apparaisse dans la configuration des Journaux des actions utilisateur.

            $extension = 'com_mycomponent';
            $db = Factory::getDbo();
            $db->setQuery(' INSERT into #__action_logs_extensions (extension) VALUES ('.$db->Quote($extension).') ' );
            try {
                // If it fails, it will throw a RuntimeException
                $result = $db->execute();
            } catch (RuntimeException $e) {
                Factory::getApplication()->enqueueMessage($e->getMessage());
                return false;
            }

Ajoutez la configuration de l'extension à la table (#__action_log_config) afin que les données de vos actions soient capturées.

           $logConf = new stdClass();
            $logConf->id = 0;
            $logConf->type_title = 'transaction';
            $logConf->type_alias = $extension;
            $logConf->id_holder = 'id';
            $logConf->title_holder = 'trans_desc';
            $logConf->table_name = '#__mycomponent_transaction';
            $logConf->text_prefix = 'COM_MYCOMPONENT_TRANSACTION';

            try {
                // En cas d'échec, une RuntimeException sera levée
                // Insère l'objet dans la table.
                $result = Factory::getDbo()->insertObject('#__action_log_config', $logConf);
            } catch (RuntimeException $e) {
                Factory::getApplication()->enqueueMessage($e->getMessage());
                return false;
            }

Bien entendu, il serait préférable d'effectuer quelques vérifications pour s'assurer que l'enregistrement n'existe pas déjà.

Composant Assistant

Dans cet exemple, l'assistant du composant est utilisé pour effectuer l'enregistrement des actions.

       /**
         * Enregistre les détails de la transaction dans l'enregistrement du journal
         * @param   object  $user    Évite de devoir récupérer à nouveau l'utilisateur actuel.
         * @param   int     $tran_id  L'Id de la transaction venant d'être créée ou mise à jour
         * @param   int     $id  Référence de l'id transmise depuis le formulaire pour identifier s'il s'agit d'un nouvel enregistrement
         * @return  boolean True
         */
        public static function recordActionLog($user = null, $tran_id = 0, $id = 0)
        {
                // récupère les détails du composant tels que l'id
            $extension =  MycomponentHelper::getExtensionDetails('com_mycomponent');
            // récupère les détails de la transaction pour une référence facile dans le journal
            $tran = MycomponentHelper::getTransaction($tran_id);
            $con_type = "transaction";
            if ($id === 0) { $type = 'Nouveau '; } else { $type = 'Mise à jour '; }

            $message = array();
            $message['action'] = $con_type;
            $message['type'] = $type . $tran->tran_type . ' - '.$tran->tran_desc . ' $' . $tran->tran_amount;
            $message['id'] = $tran->id;
            $message['title'] = $extension->name;
            $message['extension_name'] = $extension->name;
            $message['itemlink'] = "index.php?option=com_mycomponent&task=transaction.edit&id=".$tran->id;
            $message['userid'] = $user->id;
            $message['username'] = $user->username;
            $message['accountlink'] = "index.php?option=com_users&task=user.edit&id=".$user->id;

            $messages = array($message);

            $messageLanguageKey = Text::_('COM_MYCOMPONENT_TRANSACTION_LINK');
            $context = $extension->name.'.'.$con_type;

            $fmodel = MycomponentHelper::getForeignModel('Actionlog', 'ActionlogsModel');

            $fmodel->addLog($messages, $messageLanguageKey, $context, $user->id);

            return true;
        }

        /**
         * Récupère le Modèle d'un autre composant pour utilisation
         * @param   string  $name    Le nom du modèle. Optionnel. Par défaut, le mien pour plus de sécurité.
         * @param   string  $prefix  Le préfixe de classe. Optionnel
         * @param   array   $config  Tableau de configuration pour le modèle. Optionnel
         * @return object   Le modèle
         */
        public function getForeignModel($name = 'Transaction', $prefix = 'MycomponentModel', $config = array('ignore_request' => true))
        {
            \Joomla\CMS\MVC\Model\ItemModel::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_actionlogs/models', 'ActionlogsModelActionlog');
            $fmodel = \Joomla\CMS\MVC\Model\ItemModel::getInstance($name, $prefix, $config);

            return $fmodel;
        }

Formulaire de transaction côté public

Maintenant que les bases sont posées, il ne reste plus qu'à déclencher le processus. Nous capturons des informations sur une transaction qui est créée ou mise à jour et nous disposons d'un modèle appelé transactionform.php. C'est dans la méthode Save que nous voulons capturer un journal.

       // Le code ci-dessus vérifie et effectue ce qu'il doit faire, puis après l'enregistrement réussi de l'enregistrement, nous vérifions le paramètre pour voir si la journalisation est requise, nous transmettons les éléments clés à recordActionLog.
            $table = $this->getTable();

            if ($table->save($data) === true) {

                /* ---------------------------------------------------------------- */
                // déclenche le journal de transaction si nécessaire
                $act_log = $params->get('act_log', 0);
                if ($act_log && $table->id) {
                    // rassemble les informations et les enregistre dans un nouvel enregistrement du journal des actions
                    MycomponentHelper::recordActionLog($user, $table->id, $data['id']);
                }
                /* ---------------------------------------------------------------- */

                return $table->id;
            } else {
                return false;
            }

Fichier de langue

Enfin, pour faciliter l'affichage de la liste du journal des actions côté administration de Joomla!, nous voulons définir certains éléments clés de données à afficher dans le fichier de langue en-GB/com_mycomponent.ini.

    COM_MYCOMPONENT_TRANSACTION_LINK="L'utilisateur {username} a créé une transaction ( {type} )"