Hooks administration, rôles et permissions

Disponible dans :Free

Ces hooks agissent sur l’administration de HappenBoard et sur qui peut s’en servir. Ils couvrent les écrans de son menu, les données de démarrage de son application, les permissions de chaque rôle et la limite par visiteur des consultations publiques de rendez-vous. Utilisez-les pour ajouter un écran à votre module, créer un rôle sur mesure ou régler une page de réservation très fréquentée. Le guide Rôles et permissions explique chaque permission en termes simples, et Étendre HappenBoard avec les hooks présente les bases de la référence.

Comment les permissions sont accordées

HappenBoard vérifie ses propres permissions, comme happenboard_manage_events ou happenboard_view_attendees, plutôt que les rôles WordPress. L’extension gratuite et HappenBoard Pro ajoutent chacune les leurs aux rôles Administrateur et Éditeur lors de leur installation. Deux points comptent quand vous les modifiez dans le code :

  • Les filtres de rôles ci-dessous ne s’exécutent qu’à l’installation des permissions : à l’activation, ou une fois après une mise à jour qui en ajoute. Ils changent ce qui est écrit à ce moment, pas ce que les rôles ont aujourd’hui.
  • Les routes REST et le menu d’administration de HappenBoard laissent aussi passer tout utilisateur qui a manage_options. Retirer une permission HappenBoard aux administrateurs ne les bloque donc pas.

Rôles et permissions Pro liste les six permissions qu’ajoute HappenBoard Pro.

happenboard_admin_submenus

Filtre Free src/Admin/Menu.php

Filtre la liste des écrans d’administration de HappenBoard. La même liste construit le sous-menu HappenBoard du menu WordPress et la barre latérale de l’application d’administration HappenBoard.

Signature

apply_filters( 'happenboard_admin_submenus', array $default )

Paramètres

$default array<int,array{path:string,label:string,capability:string,parent:string,external?:bool}>
Les onze lignes intégrées, de Dashboard à Settings. Chacune a path (la route de l’application, / pour le tableau de bord), label (déjà traduit), capability, et parent : vide pour un élément de premier niveau, ou le chemin de la ligne parente, par exemple /bookings.

Valeur de retour

array<int,array{path:string,label:string,capability:string,parent:string,external?:bool}> Les lignes, dans l’ordre du menu.

Exemple

add_filter(
    'happenboard_admin_submenus',
    function ( $submenus ) {
        // Ajoutez à la liste : renvoyer un nouveau tableau ferait disparaître
        // les écrans intégrés et ceux qu'ajoute HappenBoard Pro.
        $submenus[] = array(
            'path'       => 'options-general.php?page=my-addon',
            'label'      => __( 'My add-on', 'my-addon' ),
            'capability' => 'manage_options',
            'parent'     => '',
            'external'   => true, // Une page d'admin classique, pas une route de l'appli.
        );

        return $submenus;
    },
    20
);

Remarques

  • Ajoutez au tableau reçu. HappenBoard Pro ajoute Orders, après Organizers, et Resources, sous Bookings, en priorité 10. Renvoyer un nouveau tableau les supprime avec les écrans intégrés.
  • Chaque ligne a besoin de path, label et capability. Le menu et la barre latérale de l’application montrent une ligne aux utilisateurs qui ont sa permission, et à tout utilisateur qui a manage_options. La barre latérale écarte les lignes dont la permission est vide.
  • Une nouvelle route d’application comme /reports n’ajoute qu’un lien : l’application affiche sa page introuvable, sauf si votre script remplit window.happenBoard.screens['/reports'] avant le code de l’application. C’est pourquoi Pro charge ses écrans sur admin_enqueue_scripts en priorité 5.
  • Le libellé est affiché tel quel : traduisez-le vous-même avec __(). Le filtre s’exécute sur admin_menu puis à nouveau lors de la construction des données de démarrage de l’application : votre fonction ne doit rien modifier d’autre.

happenboard_screen_context

Filtre Free src/Admin/ScreenContext.php

Filtre les données de démarrage de l’application d’administration HappenBoard, écrites dans la page sous le nom window.happenBoardVars. Ajoutez vos propres clés, ou modifiez celles d’origine.

Signature

apply_filters( 'happenboard_screen_context', array $context )

Paramètres

$context array<string,mixed>
Les données : pluginVersion, nonce (un nonce wp_rest), restBase, wpRestBase, siteUrl, siteName, adminEmail, adminUrl, pluginUrl, nav, currentUser, locale, timezone, dateFormat, timeFormat, startOfWeek, integrations, onboarded, general, colorPresets et languages.

Valeur de retour

array<string,mixed> Les données, transmises à wp_localize_script().

Exemple

add_filter(
    'happenboard_screen_context',
    function ( $context ) {
        // Vos réglages, imbriqués pour que les booléens restent booléens en JS.
        $context['myAddon'] = array(
            'enabled'  => true,
            'endpoint' => rest_url( 'my-addon/v1/' ),
        );

        return $context;
    },
    20
);

Remarques

  • Il ne s’exécute que sur les écrans d’administration HappenBoard, dont l’identifiant d’écran contient happenboard. L’éditeur de blocs reçoit un autre objet, non filtré, qui porte le même nom happenBoardVars.
  • Ajoutez au tableau, ne le remplacez pas. HappenBoard Pro ajoute une clé pro en priorité 10 : sans elle, l’application masque des fonctions Pro comme l’import de participants. L’extension gratuite ne définit pas pro : lisez-la avec $context['pro'] ?? null.
  • wp_localize_script() convertit en chaînes les valeurs scalaires de premier niveau : true arrive en JavaScript sous la forme "1". Imbriquez vos valeurs dans un tableau pour garder de vrais booléens et nombres.
  • Tout utilisateur qui peut ouvrir un écran HappenBoard reçoit ces données dans le code source de la page. N’y mettez jamais de secret, comme une clé d’API ou de licence.

happenboard_capabilities_role_defaults

Filtre Free src/Capabilities/Capabilities.php

Filtre les permissions HappenBoard que reçoit chaque rôle WordPress. Il ne s’exécute que lorsque HappenBoard installe ses permissions, pas à chaque requête.

Signature

apply_filters( 'happenboard_capabilities_role_defaults', array $mapping )

Paramètres

$mapping array<string,array<int,string>>
Le slug du rôle associé à sa liste de permissions. administrator en reçoit onze, toutes sauf happenboard_host. editor en reçoit huit : les mêmes sans happenboard_export_attendees, happenboard_manage_settings ni happenboard_manage_integrations. happenboard_host se donne à des utilisateurs, jamais à un rôle.

Valeur de retour

array<string,array<int,string>> La correspondance. Chaque permission est ajoutée avec WP_Role::add_cap(), et les rôles inexistants sont ignorés.

Exemple

// Dans une extension MU ou le fichier principal de votre extension, avant init.
add_filter(
    'happenboard_capabilities_role_defaults',
    function ( $mapping ) {
        // Les gérants de boutique WooCommerce voient participants et rendez-vous.
        $mapping['shop_manager'] = array(
            'happenboard_view_attendees',
            'happenboard_view_bookings',
        );

        return $mapping;
    }
);
// Puis désactivez et réactivez HappenBoard une fois pour l'appliquer.

Remarques

  • Il s’exécute à l’activation de HappenBoard et quand un site est ajouté à un réseau où l’extension est activée pour tout le réseau. Il s’exécute aussi une fois après une mise à jour qui ajoute des permissions : ce contrôle lit l’option happenboard_caps_version sur init en priorité 1.
  • Modifier la correspondance plus tard n’accorde rien à lui seul : désactivez puis réactivez HappenBoard pour l’appliquer. Branchez votre fonction avant init priorité 1, par exemple dans le fichier principal de votre extension.
  • Il ne fait qu’ajouter. Retirer une permission de la correspondance ne l’enlève pas au rôle qui l’a déjà : appelez vous-même WP_Role::remove_cap().
  • La désinstallation de HappenBoard retire ses douze permissions de chaque rôle et de chaque utilisateur, mais pas les autres permissions ajoutées avec ce filtre.

happenboard_pro_capabilities_role_defaults

Filtre Pro src/Capabilities/Capabilities.php

Filtre les rôles WordPress qui reçoivent les six permissions de HappenBoard Pro. Il ne s’exécute que lorsque Pro installe ses permissions.

Signature

apply_filters( 'happenboard_pro_capabilities_role_defaults', array $mapping )

Paramètres

$mapping array<string,array<int,string>>
administrator les reçoit toutes les six : happenboard_manage_tickets, happenboard_view_orders, happenboard_export_orders, happenboard_refund_orders, happenboard_run_checkin et happenboard_manage_resources. editor en reçoit quatre, sans export ni remboursement.

Valeur de retour

array<string,array<int,string>> La correspondance, écrite avec WP_Role::add_cap(). Les rôles inexistants sont ignorés.

Exemple

add_filter(
    'happenboard_pro_capabilities_role_defaults',
    function ( $mapping ) {
        // Les gérants de boutique WooCommerce gèrent commandes et remboursements.
        $mapping['shop_manager'] = array(
            'happenboard_view_orders',
            'happenboard_export_orders',
            'happenboard_refund_orders',
        );

        return $mapping;
    }
);
// Puis désactivez et réactivez HappenBoard Pro une fois pour l'appliquer.

Remarques

  • Il s’exécute aux mêmes moments que le filtre gratuit. Ce sont l’activation de Pro, l’ajout d’un site à un réseau où Pro est activé pour tout le réseau, et une mise à jour qui ajoute des permissions. Cette dernière est repérée par l’option happenboard_pro_caps_version sur init en priorité 1.
  • Il ne fait qu’ajouter, et une modification ne s’applique qu’après avoir désactivé puis réactivé Pro.
  • happenboard_manage_integrations appartient à l’extension gratuite, même si les écrans d’intégration de Pro s’en servent. Accordez-la avec happenboard_capabilities_role_defaults.
  • Désinstaller Pro avec HAPPENBOARD_PRO_UNINSTALL définie retire ses six permissions de chaque rôle et utilisateur, pas les autres permissions ajoutées ici.

happenboard_me_capabilities

Filtre Free src/REST/Me.php

Filtre la carte des permissions renvoyée par GET /happenboard/v1/me/capabilities. L’application d’administration et les front ends découplés la lisent pour choisir les boutons à afficher.

Signature

apply_filters( 'happenboard_me_capabilities', array $caps, WP_User $user )

Paramètres

$caps array<string,bool>
Huit permissions gratuites, chacune réglée sur le contrôle de ses routes REST, repli compris. Ce sont : gérer événements, lieux et organisateurs, voir, gérer et exporter les participants, gérer les réglages et les intégrations. Lieux et organisateurs se replient sur edit_posts, les autres sur manage_options. Les permissions de rendez-vous et happenboard_host n’y figurent pas.
$user WP_User
L’utilisateur courant. Toujours connecté : la route refuse les requêtes anonymes.

Valeur de retour

array<string,bool> La carte, envoyée dans la clé capabilities de la réponse.

Exemple

add_filter(
    'happenboard_me_capabilities',
    function ( $caps, $user ) {
        // Un front end sur mesure a aussi besoin des permissions de rendez-vous.
        $extra = array( 'happenboard_view_bookings', 'happenboard_manage_booking_types', 'happenboard_host' );

        foreach ( $extra as $cap ) {
            $caps[ $cap ] = user_can( $user, $cap );
        }

        return $caps;
    },
    10,
    2
);

Remarques

  • Deux arguments : add_filter( ..., 10, 2 ).
  • Il ne fait qu’informer. Passer une valeur à true affiche un bouton, mais la route REST derrière vérifie toujours la vraie permission et refuse la requête.
  • HappenBoard Pro ajoute ses six permissions en priorité 10, avec le même repli sur manage_options que ses routes. Ajoutez au tableau : en renvoyer un nouveau supprime les entrées gratuites et Pro.
  • Tout utilisateur connecté, abonné compris, peut appeler cette route. Gardez des valeurs booléennes et n’ajoutez rien que vous ne montreriez pas à chaque compte.

happenboard_throttle_public_reads

Filtre Free src/Service/Security/ReadThrottle.php

Filtre si HappenBoard compte les consultations publiques de rendez-vous par adresse de visiteur, et en refuse plus de 60 par minute. Ces consultations sont la liste des créneaux libres et le devis d’un type de rendez-vous.

Signature

apply_filters( 'happenboard_throttle_public_reads', bool $counts )

Paramètres

$counts bool
true quand le site utilise un cache d’objets persistant comme Redis ou Memcached (wp_using_ext_object_cache()), sinon false.

Valeur de retour

bool true pour compter et limiter les consultations, false pour toutes les laisser passer.

Exemple

add_filter(
    'happenboard_throttle_public_reads',
    function ( $counts ) {
        // Pas de Redis ni de Memcached ici, mais un robot aspire la page de
        // réservation : comptez quand même les consultations.
        return true;
    }
);

Remarques

  • Trois routes sont comptées. GET /happenboard/v1/booking-types/{id}/slots et la liste de report GET /happenboard/v1/bookings/{token}/slots partagent un compteur, GET /happenboard/v1/booking-types/{id}/quote a le sien. Au-delà de 60 dans une même minute, l’adresse reçoit une réponse HTTP 429.
  • Sans cache d’objets persistant, chaque compteur est un transient : deux lignes dans la table des options par adresse et par minute, laissées au nettoyage quotidien de WordPress. C’est pourquoi le comptage y est désactivé par défaut.
  • L’adresse est REMOTE_ADDR, passée par le filtre happenboard_booking_client_ip. Derrière un proxy ou un CDN, filtrez-la vers la vraie adresse du visiteur, sinon tous les visiteurs partagent un compteur.
  • Il ne concerne ni l’envoi des inscriptions et des réservations, qui gardent leurs propres limites, ni la recherche de rendez-vous de HappenBoard Pro.

Pour aller plus loin