Administrateur du site

PowerPortalsPro propose une page d’administrateur de site qui permet à un administrateur soutenu par SystemUser de vider les caches côté serveur sans redémarrer l’hôte. Le framework fournit l’API de nettoyage du cache (IPowerPortalsProService.ClearAllCachesAsync / ClearCacheAsync) ; votre portail fournit la page elle-même, la porte de rôle et le lien de navigation.

Le câblage

Trois éléments à intégrer : le transformateur de revendication de rôle, la page elle-même, et une entrée de navigation. Les modèles de portails (powerportalspro-csharp avec les Auto, WebAssembly, ou Server les options d’interactivité) livrent les trois dès la sortie de la boîte — les extraits ci-dessous reflètent ce que les modèles émettent afin que vous puissiez les soulever dans un portail qui n’a pas été généré à partir d’un modèle.

1. Configurer quels rôles Dataverse accordent à l’administrateur

SystemAdminClaimsTransformer marque une revendication de rôle synthétique SystemAdmin sur tout principal détenant soit le rôle Dataverse intégré System Administrator , soit un rôle personnalisé configuré via PortalIdentityOptions.SystemAdminRoleName. Le rôle intégré est toujours considéré comme administrateur ; Le rôle configuré est optionnel et superposé par-dessus. L’autorisation UI ([Authorize(Roles = "SystemAdmin")] et <AuthorizeView Roles="SystemAdmin">) vérifie la revendication synthétique, de sorte qu’un rôle personnalisé Dataverse puisse obtenir un accès administrateur sans toucher au code rasoir.

2. Ajouter la page d’administrateur du site

L’attribut [Authorize(Roles = "SystemAdmin")] est honoré par AuthorizeRouteView; l’intérieur <AuthorizeView Roles="SystemAdmin"> est défense en profondeur au cas où un hôte échangerait le routeur. La page complète (avec le bouton Effacer tout, la liste par cache avec des descriptions localisées, et les retours toast) se trouve dans les modèles SiteAdmin.razor.

3. Faire surface dans la navigation

Encapsulez le groupe de navigation Admin dans un <AuthorizeView Roles="SystemAdmin"> système pour que les non-administrateurs ne voient pas un lien qu’ils ne peuvent pas suivre. La cible du lien est la route où la page s’enregistre.

Ce qui est mis en cache

Le framework enregistre neuf caches comme IClearableCache; la page Administrateur du site les rend triés alphabétiquement avec leurs descriptions localisées à côté de chacune. Les descriptions se trouvent dans les cadres ppp-server.defaults.en.json sous app.cache-descriptions.

  • TableMetadata — Métadonnées par table (colonnes, types, options de choix, relations). Rafraîchissement après changements de schéma.
  • ViewMetadata — Vues Dataverse mises en cache (FetchXML, colonnes, tri). Rafraîchir après avoir modifié une vue dans Dataverse.
  • EntityMetadata — Métadonnées brutes de l’entité Dataverse utilisées par le code framework de bas niveau. Même source que TableMetadata mais sous une forme différente — généralement réinitialisée ensemble.
  • StringLocalizer — Toutes les chaînes localisées — étiquettes de tables/colonnes Dataverse, ressources web et fichiers JSON de dossiers. Rafraîchir après avoir modifié n’importe quelle source de localisation.
  • UserPrivileges — Privilèges de sécurité résolus par utilisateur (quels rôles accordent quelles permissions). Rafraîchir après avoir modifié l’attribution des rôles d’un utilisateur.
  • TablePermissions — Les permissions CRUD par utilisateur, par table étaient résolues via la chaîne de gestion des permissions de table. Principalement dérivé de UserPrivileges for SystemUsers.
  • PrivilegeMetadata — Définitions des privilèges à l’échelle de l’organisation issues de la table des privilèges Dataverse. Presque jamais cela ne change — seules les mises à jour de la plateforme Dataverse introduisent de nouvelles entrées.
  • OrganizationFileSettings — Paramètres d’envoi de fichiers au niveau de l’organisation (taille maximale, extensions autorisées). Rafraîchir après avoir changé ces éléments dans Dataverse.
  • Currency — Instantané de transactionmonnaie à l’échelle de l’organisation plus la devise de base de l’organisation. Rafraîchir après que les administrateurs ont ajouté ou mis à jour des devises dans Dataverse.
  • EmailSender — Enregistrement de l’expéditeur résolu pour les emails sortants (recherche de l’adresse de l’expéditeur configurée dans sa référence d’entité Dataverse).

La reconstruction de StringLocalizer est la plus lente

Vider le cache StringLocalizer parcourt les métadonnées de chaque table Dataverse + chaque ressource web + chaque fichier de dossier et reconstruit le dictionnaire en mémoire. Attendez-vous à 20 à 30 secondes dans un environnement réel. La reconstruction atomique garantit que les lecteurs continuent de voir les valeurs précédentes tout au long de la reconstruction — il n’y a pas de période où le cache est vide.

Ajouter votre propre cache

Implémentez-le IClearableCache et enregistrez-le à la fois comme votre service de béton ET IClearableCachecomme . La page d’administrateur du site la récupère automatiquement et la rend par ordre alphabétique avec le reste. La Name propriété est l’identifiant public — c’est ce qui apparaît sur le bouton par cache.

Description localisée

La page Administrateur du site retrouve app.cache-descriptions.<Name> dans le localisateur pour afficher le texte de description à côté du bouton. Ajoutez une entrée sous cet espace de noms dans les fichiers de app.en.json votre portail (et dans tout autre langage) ; les pages sans description enregistrée affichent gracieusement uniquement le bouton.

Effacer tout contre par cache

Effacer Tout exécute tous les caches ClearAsync enregistrés en parallèle et rapporte les résultats par cache (réussi / échec / ms écoulés) dans la réponse. Les boutons par cache se déclenchent de la même ClearAsync façon pour un seul cache — utile quand vous n’avez besoin d’en supprimer qu’un seul (par exemple, après avoir modifié une seule vue Dataverse).

Référence API

L’API de nettoyage du cache vit sur IPowerPortalsProService; l’orchestration sous-jacente qui exécute ClearAsync chaque cache en parallèle se trouve sur ICacheManager. Les interfaces sont résumées ci-dessous.

IClearableCache Interface

Propriétés

Nom
Type
Par défaut
Description
Namestring
Un nom court et stable pour la télémétrie / retour d’interface utilisateur (par exemple « TableMetadata »). Il n’a pas besoin d’être convivial pour les humains — c’est un identifiant machine : l’interface d’administration peut être mappé sur une étiquette localisée.
Nom: Name
Type: string
Description: Un nom court et stable pour la télémétrie / retour d’interface utilisateur (par exemple « TableMetadata »). Il n’a pas besoin d’être convivial pour les humains — c’est un identifiant machine : l’interface d’administration peut être mappé sur une étiquette localisée.

Méthodes

Nom
Paramètres
Type
Description
ClearAsyncCancellationToken cancellationToken
Task
Efface le contenu de la cache. Pour les caches qui maintiennent des données préchargées (par exemple StringLocalizerCache), les implémentations doivent reconstruire le données atomiquement, donc les lecteurs existants continuent à voir les anciennes données jusqu’à ce que Le nouvel État est entièrement peuplé. Pour les caches paresseuses / à la demande, la chute les entrées sont suffisantes — le prochain appelant déclenche un nouveau chargement.
Nom: ClearAsync
Paramètres: CancellationToken cancellationToken
Type: Task
Description: Efface le contenu de la cache. Pour les caches qui maintiennent des données préchargées (par exemple StringLocalizerCache), les implémentations doivent reconstruire le données atomiquement, donc les lecteurs existants continuent à voir les anciennes données jusqu’à ce que Le nouvel État est entièrement peuplé. Pour les caches paresseuses / à la demande, la chute les entrées sont suffisantes — le prochain appelant déclenche un nouveau chargement.

ICacheManager Interface

Méthodes

Nom
Paramètres
Type
Description
ClearAllAsyncCancellationToken cancellationToken
Task<IReadOnlyList<CacheClearResult>>
Efface tout enregistré Services.IClearableCache en parallèle et revient Un rapport par cache. Un cache défaillant ne bloque pas les autres — son entrée dans le rapport porte le message d’exception au lieu de null.
ClearAsyncstring name
CancellationToken cancellationToken
Task<CacheClearResult>
Ça vide un cache nommé. Déclarations null en cas d’absence d’enregistrement correspondance name de cache (insensible à la majuscule). Les défaillances sont enveloppées dans le résultat plutôt que lancé, correspondant Threading.CancellationToken)à .
GetCacheNamesIReadOnlyList<string>
Retourne les noms de chaque enregistrement Services.IClearableCache, approprié pour une interface d’administration qui souhaite afficher les boutons de nettoyage par cache.
Nom: ClearAllAsync
Paramètres: CancellationToken cancellationToken
Type: Task<IReadOnlyList<CacheClearResult>>
Description: Efface tout enregistré Services.IClearableCache en parallèle et revient Un rapport par cache. Un cache défaillant ne bloque pas les autres — son entrée dans le rapport porte le message d’exception au lieu de null.
Nom: ClearAsync
Paramètres: string name
CancellationToken cancellationToken
Type: Task<CacheClearResult>
Description: Ça vide un cache nommé. Déclarations null en cas d’absence d’enregistrement correspondance name de cache (insensible à la majuscule). Les défaillances sont enveloppées dans le résultat plutôt que lancé, correspondant Threading.CancellationToken)à .
Nom: GetCacheNames
Type: IReadOnlyList<string>
Description: Retourne les noms de chaque enregistrement Services.IClearableCache, approprié pour une interface d’administration qui souhaite afficher les boutons de nettoyage par cache.