Inicio de sesión SystemUser

Power Portals Pro reconoce los registros de Dataverse systemuser iniciados como usuarios del portal, junto con los usuarios respaldados por defecto contact. No se requiere configuración: cuando un usuario inicia sesión mediante autenticación de Microsoft, el portal primero busca una coincidencia systemuser; si existe una, la sesión se ejecuta como ese usuario del sistema y Dataverse hace cumplir la seguridad mediante suplantación. Si no se encuentra ningún usuario del sistema coincidente, el inicio de sesión vuelve a la ruta de contacto. El mismo portal puede atender al personal interno con licencia Dataverse y a los contactos externos de clientes al mismo tiempo.

Cuando esto importa

El flujo respaldado por el usuario del sistema es útil cuando:

Solo autenticación de Microsoft

Solo el proveedor externo Microsoft / Entra ID puede resolver a un usuario del sistema; los usuarios son emparejados — systemuser.azureactivedirectoryobjectid el ID del objeto que el proveedor afirma para este inicio de sesión, nunca una dirección que reporte — y cualquier usuario isdisabled = true del sistema con el que se bloquea. Nombre de usuario/contraseña local y otros proveedores externos (Google, etc.) siempre inician sesión como contacto.

Cómo funciona

En un inicio de sesión de Microsoft, el portal:

  1. Consulta el ID de objeto Azure AD autenticado contra systemuser.azureactivedirectoryobjectid. Si un registro activo coincide, la sesión queda vinculada a ese usuario del sistema. Nunca se le pide a un usuario interno que confirme una dirección de correo electrónico: el id del objeto es la propia afirmación del proveedor, y un systemuser registro no tiene dónde registrar una confirmación.
  2. De lo contrario, vuelve al flujo de contacto (coincidiendo con el inicio de sesión externo a través de adx_externalidentity).
  3. Para las sesiones de systemuser, ServiceClient.CallerId se establece para systemuserid que cada llamada a Dataverse se ejecute como usuario iniciado sesión — con sus roles de seguridad, alcance de unidad de negocio y acceso a nivel de fila. Las operaciones y columnas que concede un portal ITablePermissionProvider se omiten para la solicitud; su filtro de consulta sigue ejecutándose porque moldea la propia consulta de Dataverse.
  4. Las cuadras, formularios y botones reflejan los privilegios reales del usuario en Dataverse, calculados y RetrieveUserPrivilegesRequest almacenados en caché por usuario. Las sesiones de contacto continúan fluyendo a través de los manejadores registrados como antes.

Modelo de seguridad

Para sesiones respaldadas por systemuser, porque CallerId la suplantación delega la aplicación a Dataverse:

Administradores: pruebas como contacto

Los administradores del portal suelen necesitar verificar la experiencia del lado del contacto: ¿la página principal se renderiza correctamente para un cliente iniciado sesión? ¿Este caso oculta correctamente ese botón de la barra de herramientas? — sin perder su capacidad para realizar acciones administrativas. Power Portals Pro soporta esto directamente: un administrador puede mantener un inicio de sesión de Microsoft vinculado tanto systemuser a una (su cuenta interna) como a contact (un registro de prueba, o su propio registro del lado del cliente), y alternar entre ambos sin cerrar sesión.

Audiencias mixtas: diseña tus datos en consecuencia

Un único portal puede servir tanto a usuarios de sistema como a usuarios de contacto en el mismo despliegue. Si tus personalizaciones incluyen filtros FetchXML que asignan filas adx_contactid == currentUserId (un patrón común en portales solo de contacto), esos filtros no tendrán sentido cuando el usuario iniciado sesión es un usuario del sistema. Haz ramificaciones en tu código de personalización en el tipo de usuario para que cada audiencia vea los datos apropiados para él.

Cachés de privilegios

El mapa de metadatos de privilegios a nivel de entorno se carga una vez al iniciar la aplicación y se almacena en caché indefinidamente; Reiniciar la aplicación (o llamada IPrivilegeMetadataCache.InvalidateAsync) para detectar nuevas tablas o cambios en el esquema de privilegios. Los privilegios efectivos de cada usuario del sistema iniciado sesión se almacenan en caché durante 24 horas y pueden ser expulsados con IUserPrivilegeCache.InvalidateAsync(userId).