Administrador del sitio

PowerPortalsPro incluye una página de administrador del sitio que permite a un administrador respaldado por SystemUser limpiar cachés del lado del servidor sin reiniciar el host. El framework proporciona la API de limpieza de caché (IPowerPortalsProService.ClearAllCachesAsync / ClearCacheAsync); tu portal proporciona la página en sí, la puerta de roles y el enlace de navegación.

Conectándolo

Tres cosas que conectar: el transformador de reclamación de rol, la propia página y una entrada de navegación. Las plantillas de portal (powerportalspro-csharp con las Autoopciones , WebAssembly, o Server interactividad) incluyen las tres desde el primer momento: los fragmentos de abajo reflejan lo que emiten las plantillas para que puedas llevarlas a un portal que no se generó a partir de una plantilla.

1. Configurar qué roles de Dataverse otorgan administrador

SystemAdminClaimsTransformer marca una reivindicación de rol sintético SystemAdmin sobre cualquier principal que System Administrator posea el rol Dataverse incorporado o un rol personalizado configurado mediante PortalIdentityOptions.SystemAdminRoleName. El rol incorporado siempre se trata como administrador; El rol configurado es opcional y se superpone por encima. La autorización de la interfaz ([Authorize(Roles = "SystemAdmin")] y <AuthorizeView Roles="SystemAdmin">) comprueba la reivindicación sintética, por lo que un rol personalizado de Dataverse puede recibir acceso de administrador sin tocar el código de afeița.

2. Añadir la página de Administrador del Sitio

El [Authorize(Roles = "SystemAdmin")] atributo se respeta con AuthorizeRouteView; el interior <AuthorizeView Roles="SystemAdmin"> es defensa en profundidad en caso de que un host cambie el router. La página completa (con el botón Borrar Todo, la lista por caché con descripciones localizadas y el feedback de tostada) está en las plantillas SiteAdmin.razor.

3. Aflorar en la navegación

Envuelve el grupo de navegación de administradores para <AuthorizeView Roles="SystemAdmin"> que los no administradores no vean ningún enlace que no puedan seguir. El destino del enlace es la ruta en la que se registra la página.

Qué se almacena en caché

El framework registra nueve cachés como IClearableCache; la página de Administrador del Sitio las muestra ordenadas alfabéticamente con sus descripciones localizadas junto a cada una. Las descripciones se encuentran en los marcos ppp-server.defaults.en.json bajo app.cache-descriptions.

  • TableMetadata — Metadatos por tabla (columnas, tipos, opciones de elección, relaciones). Actualizar después de los cambios en el esquema.
  • ViewMetadata — Vistas en caché de Dataverse (FetchXML, columnas, ordenación). Actualiza después de editar una vista en Dataverse.
  • EntityMetadata — Metadatos brutos de la entidad Dataverse usados por el código framework de nivel inferior. La misma fuente que TableMetadata en una forma diferente — normalmente se reinicia juntos.
  • StringLocalizer — Todas las cadenas localizadas — etiquetas de tablas/columnas de Dataverse, recursos web y archivos JSON de carpetas. Actualiza después de editar cualquier fuente de localización.
  • UserPrivileges — Privilegios de seguridad resueltos por usuario (qué roles otorgan qué permisos). Actualiza después de cambiar la asignación de roles de un usuario.
  • TablePermissions — Los permisos CRUD por usuario y por tabla se resolvían a través de la cadena de gestores de permisos de tabla. Principalmente derivado de UserPrivileges for SystemUsers.
  • PrivilegeMetadata — Definiciones de privilegios a nivel de organización a partir de la tabla de privilegios de Dataverse. Casi nunca cambia — solo las actualizaciones de la plataforma Dataverse introducen nuevas entradas.
  • OrganizationFileSettings — Configuración de subida de archivos a nivel de organización (tamaño máximo, extensiones permitidas). Actualiza después de cambiar estos en Dataverse.
  • Currency — Instantánea de transaccionamiento de la moneda a nivel de toda la organización más la moneda base de la organización. Actualiza después de que los administradores añadan o actualicen monedas en Dataverse.
  • EmailSender — Registro del remitente resuelto para correos salientes (búsqueda de la dirección del remitente configurada en la referencia de la entidad Dataverse).

La reconstrucción de StringLocalizer es la lenta

Al limpiar la caché de StringLocalizer, se recorren los metadatos de cada tabla de Dataverse + cada recurso web + cada archivo de carpetas y se reconstruye el diccionario en memoria. Espera entre 20 y 30 segundos contra un entorno real. La reconstrucción atómica garantiza que los lectores sigan viendo los valores anteriores durante toda la reconstrucción — no hay ningún periodo en el que la caché esté vacía.

Añadir tu propia caché

Implementa IClearableCache y regístralo tanto como tu servicio de hormigón COMO IClearableCachecomo . La página de Administrador del Sitio lo recoge automáticamente y lo renderiza alfabéticamente junto con el resto. La Name propiedad es el identificador público — es lo que aparece en el botón por caché.

Descripción localizada

La página de Administrador del Sitio busca app.cache-descriptions.<Name> en el localizador el texto de la descripción junto al botón. Añade una entrada bajo ese espacio de nombres en el archivo de app.en.json tu portal (y en cualquier otro archivo); las páginas sin una descripción registrada se renderizan correctamente solo el botón.

Borrar todo vs. por caché

Borrar Todo ejecuta todas las cachés ClearAsync registradas en paralelo y reporta resultados por caché (éxito / fallido / ms transcurridos) en la respuesta. Los botones por caché disparan igual ClearAsync solo para una caché — útil cuando solo necesitas soltar una (por ejemplo, después de editar una sola vista del Dataverse).

Referencia de API

La API de borrado de caché vive en IPowerPortalsProService; la orquestación subyacente que ejecuta ClearAsync cada caché en paralelo permanece en ICacheManager. Las interfaces se resumen a continuación.

IClearableCache Interface

Propiedades

Nombre
Tipo
Default
Descripción
Namestring
Un nombre corto y estable para la telemetría / retroalimentación de la interfaz (por ejemplo, 'TableMetadata'). No tiene que ser amigable para las personas — es un identificador de máquina, la interfaz de administrador puede asignarse a una etiqueta localizada.
Nombre: Name
Tipo: string
Descripción: Un nombre corto y estable para la telemetría / retroalimentación de la interfaz (por ejemplo, 'TableMetadata'). No tiene que ser amigable para las personas — es un identificador de máquina, la interfaz de administrador puede asignarse a una etiqueta localizada.

Métodos

Nombre
Parámetros
Tipo
Descripción
ClearAsyncCancellationToken cancellationToken
Task
Borra el contenido de la caché. Para cachés que mantienen datos precargados (por ejemplo, StringLocalizerCache), las implementaciones deben reconstruir el Datos atómicos, así que los lectores existentes siguen viendo los datos antiguos hasta que El nuevo estado está completamente poblado. Para cachés perezosas / bajo demanda, drops las entradas son suficientes — el siguiente llamante activa una nueva carga.
Nombre: ClearAsync
Parámetros: CancellationToken cancellationToken
Tipo: Task
Descripción: Borra el contenido de la caché. Para cachés que mantienen datos precargados (por ejemplo, StringLocalizerCache), las implementaciones deben reconstruir el Datos atómicos, así que los lectores existentes siguen viendo los datos antiguos hasta que El nuevo estado está completamente poblado. Para cachés perezosas / bajo demanda, drops las entradas son suficientes — el siguiente llamante activa una nueva carga.

ICacheManager Interface

Métodos

Nombre
Parámetros
Tipo
Descripción
ClearAllAsyncCancellationToken cancellationToken
Task<IReadOnlyList<CacheClearResult>>
Limpia todos los registros Services.IClearableCache en paralelo y regresa Un informe por caché. Una caché fallida no bloquea las demás — su entrada en el informe lleva el mensaje de excepción en lugar de null.
ClearAsyncstring name
CancellationToken cancellationToken
Task<CacheClearResult>
Limpia una caché con nombre. Devoluciones null cuando no están registradas coincidencias name de caché (insensibles a mayúsculas y mayúsculas). Los fallos se envuelven en el resultado, en lugar de lanzado, coincidiendo Threading.CancellationToken)con .
GetCacheNamesIReadOnlyList<string>
Devuelve los nombres de cada registrado Services.IClearableCache, adecuado para una interfaz de administrador que quiere renderizar botones de limpieza por caché.
Nombre: ClearAllAsync
Parámetros: CancellationToken cancellationToken
Tipo: Task<IReadOnlyList<CacheClearResult>>
Descripción: Limpia todos los registros Services.IClearableCache en paralelo y regresa Un informe por caché. Una caché fallida no bloquea las demás — su entrada en el informe lleva el mensaje de excepción en lugar de null.
Nombre: ClearAsync
Parámetros: string name
CancellationToken cancellationToken
Tipo: Task<CacheClearResult>
Descripción: Limpia una caché con nombre. Devoluciones null cuando no están registradas coincidencias name de caché (insensibles a mayúsculas y mayúsculas). Los fallos se envuelven en el resultado, en lugar de lanzado, coincidiendo Threading.CancellationToken)con .
Nombre: GetCacheNames
Tipo: IReadOnlyList<string>
Descripción: Devuelve los nombres de cada registrado Services.IClearableCache, adecuado para una interfaz de administrador que quiere renderizar botones de limpieza por caché.