docs: ldap dingtalk (#10382)

This commit is contained in:
Zhi Chen
2026-08-18 14:04:35 +08:00
committed by GitHub
parent 42805909c4
commit 61682f36ab
32 changed files with 1822 additions and 6 deletions
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "Datenquellen",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "WeChat Work",
+8 -1
View File
@@ -8,6 +8,13 @@ pkg: '@nocobase/plugin-user-data-sync'
Mit dieser Funktion können Sie Quellen für die Benutzerdatensynchronisation registrieren und verwalten. Standardmäßig ist eine HTTP API verfügbar, aber Sie können weitere Datenquellen über Plugins hinzufügen. Die Synchronisation von Daten in die **Benutzer**- und **Abteilungs**-Sammlungen wird standardmäßig unterstützt. Über Plugins lässt sich die Synchronisation auch auf andere Zielressourcen erweitern.
## Verfügbare Datenquellen
- [DingTalk](./sources/dingtalk.md) — DingTalk-Benutzer und -Abteilungen mit HTTP-Callback oder Stream-Modus synchronisieren.
- [LDAP](./sources/ldap.md) — LDAP-Benutzer und optionale Organisationseinheiten mithilfe eines vorhandenen LDAP-Authentifikators synchronisieren.
- [WeCom](./sources/wecom.md) — Benutzer und Abteilungen aus WeCom synchronisieren.
- [HTTP-API](./sources/api.md) — Benutzer- und Abteilungsdaten über die Synchronisations-API übertragen.
## Datenquellenverwaltung und Datensynchronisation
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -40,4 +47,4 @@ Bei fehlgeschlagenen Synchronisationsaufgaben können Sie auf „Wiederholen“
Im Falle von Synchronisationsfehlern können Sie die Ursache über die Systemprotokolle ermitteln. Zusätzlich werden die ursprünglichen Datensynchronisationsaufzeichnungen im Verzeichnis `user-data-sync` unter dem Anwendungslog-Ordner gespeichert.
![](https://static-docs.nocobase.com/202412041205655.png)
![](https://static-docs.nocobase.com/202412041205655.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "Benutzerdaten aus DingTalk synchronisieren"
description: "DingTalk-Benutzer und -Abteilungen mit NocoBase synchronisieren und inkrementelle Änderungen per HTTP-Callback oder Stream-Modus empfangen."
keywords: "DingTalk,Benutzersynchronisation,Abteilungssynchronisation,Stream-Modus,Ereignisabonnement,NocoBase"
---
# Benutzerdaten aus DingTalk synchronisieren
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## Einführung
Das Plugin **DingTalk** synchronisiert Benutzer und Abteilungen einer DingTalk-Organisation mit NocoBase. Es unterstützt eine manuelle Vollsynchronisation sowie inkrementelle Aktualisierungen über HTTP-Callback oder Stream-Verbindung.
## Voraussetzungen
1. Installieren und aktivieren Sie die Plugins **DingTalk** und **Benutzerdatensynchronisation**.
2. Erstellen Sie in der DingTalk-Entwicklerkonsole eine unternehmensinterne Anwendung.
3. Erteilen Sie die unten beschriebenen Kontaktberechtigungen und konfigurieren Sie den Datenberechtigungsbereich.
4. Kopieren Sie Client ID und Client Secret. Weitere Informationen finden Sie unter [Authentifizierung: DingTalk](/auth-verification/auth-dingtalk/).
## Kontaktberechtigungen und Datenberechtigungsbereich konfigurieren
Öffnen Sie in der DingTalk-Entwicklerkonsole die **Berechtigungsverwaltung** der Anwendung und erteilen Sie folgende Berechtigungen:
| Berechtigung | Kennung | Erforderlich | Zweck |
| --- | --- | --- | --- |
| Abteilungsinformationen lesen | `qyapi_get_department_list` | Ja | Abteilungsliste, Namen und Hierarchie lesen. |
| Abteilungsmitglieder lesen | `qyapi_get_department_member` | Ja | Mitglieder einer Abteilung lesen. |
| Mitgliedsinformationen lesen | `qyapi_get_member` | Ja | Benutzerdetails und Abteilungszugehörigkeiten lesen. |
| Mobilnummern von Mitarbeitern | `fieldMobile` | Bei Nutzung der Mobilnummer | Mobilnummern synchronisieren; erforderlich, wenn das eindeutige Benutzerfeld `mobile` ist. |
| E-Mail und weitere persönliche Informationen | `fieldEmail` | Nein | Erforderlich, wenn E-Mail-Adressen synchronisiert werden sollen. |
Konfigurieren Sie anschließend den **Datenberechtigungsbereich** der Anwendung so, dass alle zu synchronisierenden Abteilungen und Mitarbeiter enthalten sind. Für eine vollständige Organisationssynchronisation wählen Sie alle Mitarbeiter aus.
:::warning
API-Berechtigungen bestimmen, welche Felder gelesen werden dürfen. Der Datenberechtigungsbereich bestimmt, welche Abteilungen und Mitarbeiter gelesen werden dürfen. Beides muss konfiguriert sein. Ereignisabonnements ersetzen die Leseberechtigungen nicht.
:::
Wenn dieselbe Anwendung auch zur Anmeldung verwendet wird, erteilen Sie zusätzlich die unter [Authentifizierung: DingTalk](/auth-verification/auth-dingtalk/) beschriebenen persönlichen Berechtigungen.
## DingTalk-Synchronisationsquelle hinzufügen
Öffnen Sie **Benutzer & Berechtigungen > Synchronisieren**, klicken Sie auf **Hinzufügen** und wählen Sie **DingTalk**.
| Feld | Beschreibung |
| --- | --- |
| Quellenname | Eindeutiger Name der Synchronisationsquelle. |
| Aktiviert | Startet den Ereignisempfang und erlaubt Synchronisationsaufgaben. |
| Client ID | Client ID der DingTalk-Anwendung; Umgebungsvariablen und Secrets werden unterstützt. |
| Client Secret | Client Secret der DingTalk-Anwendung; Umgebungsvariablen und Secrets werden unterstützt. |
| Eindeutiges Benutzerfeld | `mobile` oder `unionId`. Ändern Sie die Auswahl nach der ersten Synchronisation nicht. Benutzer ohne den gewählten Wert werden übersprungen. |
| Ereignisempfangsmodus | **HTTP-Callback** oder **Stream-Modus** für inkrementelle Änderungen. |
Speichern und aktivieren Sie die Quelle. Führen Sie anschließend über **Synchronisieren** zuerst eine Vollsynchronisation aus.
## Ereignisempfangsmodus auswählen
### Stream-Modus
Der Stream-Modus stellt vom NocoBase-Server aus eine dauerhafte Verbindung zu DingTalk her. Eine öffentliche Callback-URL, ein Token und ein EncodingAESKey sind nicht erforderlich.
1. Wählen Sie in den Ereignisabonnement-Einstellungen von DingTalk den **Stream-Modus**.
2. Abonnieren Sie die benötigten Benutzer- und Abteilungsereignisse.
3. Wählen Sie in NocoBase den **Stream-Modus**, speichern und aktivieren Sie die Quelle.
Der Stream-Client wird beim Aktivieren der Quelle gestartet. Beim Aktualisieren, Deaktivieren oder Löschen wird die Verbindung entsprechend aktualisiert oder geschlossen.
:::info
Der NocoBase-Server muss ausgehende Verbindungen zu DingTalk herstellen können. Ein Reverse Proxy oder eine öffentliche eingehende Callback-Adresse ist nicht erforderlich.
:::
### HTTP-Callback
1. Wählen Sie in NocoBase **HTTP-Callback**.
2. Geben Sie Token und EncodingAESKey aus dem DingTalk-Ereignisabonnement ein.
3. Speichern Sie die Quelle und kopieren Sie die erzeugte **Ereignis-Callback-URL**.
4. Hinterlegen Sie diese URL in DingTalk und abonnieren Sie die Benutzer- und Abteilungsereignisse.
Die Callback-URL muss für DingTalk erreichbar sein. Verwenden Sie in Produktion HTTPS und stellen Sie sicher, dass der Reverse Proxy den Pfad unverändert weiterleitet.
## Unterstützte inkrementelle Ereignisse
| Ereignis | Verarbeitung in NocoBase |
| --- | --- |
| `user_add_org` | Benutzer erstellen oder aktualisieren. |
| `user_modify_org` | Benutzer aktualisieren. |
| `user_leave_org` | Synchronisierten Benutzer löschen. |
| `org_dept_create` | Abteilung erstellen oder aktualisieren. |
| `org_dept_modify` | Abteilung aktualisieren und deren Benutzer synchronisieren. |
| `org_dept_remove` | Synchronisierte Abteilung löschen. |
## Synchronisierte Felder
### Abteilungsfelder
| DingTalk-Feld | NocoBase-Feld oder Zweck |
| --- | --- |
| `dept_id` | Eindeutige Quellkennung der Abteilung. |
| `name` | Abteilungsname. |
| `parent_id` | Übergeordnete Abteilung. Liegt diese außerhalb des Berechtigungsbereichs, wird die Abteilung als Wurzelabteilung synchronisiert. |
### Benutzerfelder
| DingTalk-Feld | NocoBase-Feld oder Zweck |
| --- | --- |
| `mobile` oder `unionid` | Eindeutige Quellkennung und Benutzername entsprechend der Konfiguration. |
| `name` | Anzeigename des Benutzers. |
| `mobile` | Telefonnummer. Erfordert `fieldMobile`. |
| `email`, ersatzweise `org_email` | E-Mail-Adresse. Erfordert `fieldEmail`. |
| `dept_id_list` | Abteilungszugehörigkeiten innerhalb des Datenberechtigungsbereichs. |
| `dept_order_list` | Hauptabteilung. |
| `leader_in_dept` | Kennzeichnet den Benutzer als Verantwortlichen der jeweiligen Abteilung. |
### Abteilungsverantwortliche
NocoBase synchronisiert `leader_in_dept` für jede Abteilung getrennt. Ein Benutzer kann mehrere Abteilungen verantworten; eine verantwortete Abteilung muss nicht die Hauptabteilung sein. Wird die Kennzeichnung in DingTalk entfernt, entfernt die nächste Synchronisation sie auch in NocoBase. Manuelle Änderungen in NocoBase können überschrieben werden.
Vollständige und inkrementelle Synchronisation verwenden dieselbe Feldzuordnung. Profilbild, Position und Mitarbeiternummer werden derzeit nicht synchronisiert.
## Fehlerbehebung
- Prüfen Sie bei leeren oder unvollständigen Ergebnissen die drei erforderlichen Leseberechtigungen und den Datenberechtigungsbereich.
- Prüfen Sie bei fehlender Mobilnummer oder E-Mail die Berechtigungen `fieldMobile` bzw. `fieldEmail`.
- Benutzer ohne das konfigurierte eindeutige Feld werden übersprungen.
- Suchen Sie für den Stream-Modus in den Anwendungsprotokollen nach `Dingtalk stream client starting`, `Dingtalk stream client started` oder Verbindungsfehlern.
- Prüfen Sie beim HTTP-Callback die öffentliche Erreichbarkeit sowie Token und EncodingAESKey.
- Führen Sie nach Änderungen an Berechtigungen oder Datenbereich erneut eine Vollsynchronisation aus.
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "Benutzerdaten aus LDAP synchronisieren"
description: "Einen vorhandenen LDAP-Authentifikator wiederverwenden, um LDAP-Benutzer und -Abteilungen mit NocoBase zu synchronisieren."
keywords: "LDAP,Benutzersynchronisation,Abteilungssynchronisation,Bind DN,Search DN,NocoBase"
---
# Benutzerdaten aus LDAP synchronisieren
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## Einführung
Das Plugin **Authentifizierung: LDAP** kann einen vorhandenen LDAP-Authentifikator als Quelle für die Benutzerdatensynchronisation verwenden. Verbindung, Bind DN, Search DN, Suchbereich und Attributzuordnung werden wiederverwendet. Benutzer und optional die Abteilungshierarchie werden in NocoBase geschrieben.
## Voraussetzungen
1. Installieren und aktivieren Sie **Authentifizierung: LDAP** und **Benutzerdatensynchronisation**.
2. Erstellen und testen Sie einen LDAP-Authentifikator. Siehe [Authentifizierung: LDAP](/auth-verification/auth-ldap/).
3. Ordnen Sie im Authentifikator die benötigten Felder zu, etwa Benutzername oder E-Mail, Anzeigename und Telefonnummer.
## LDAP-Synchronisationsquelle hinzufügen
Öffnen Sie **Benutzer & Berechtigungen > Synchronisieren**, klicken Sie auf **Hinzufügen** und wählen Sie **LDAP**.
| Feld | Beschreibung |
| --- | --- |
| Quellenname | Eindeutiger Name der Synchronisationsquelle. |
| Aktiviert | Erlaubt manuelle und geplante LDAP-Synchronisationsaufgaben. |
| LDAP-Authentifikator | Vorhandener Authentifikator, dessen Verbindung und Attributzuordnung verwendet werden. |
| Synchronisationsfilter | LDAP-Filter für Benutzer. Standard: `(&(objectCategory=person)(objectClass=user))`. |
| Größenlimit | Maximale Anzahl der Einträge pro Suche; leer verwendet das Serverlimit. |
| Seitengröße | Seitengröße für paginierte LDAP-Suchen. |
| Abteilungen synchronisieren | Synchronisiert zusätzlich die LDAP-Organisationsstruktur als NocoBase-Abteilungen. |
| Abteilungs-Search-DN | Bei aktivierter Abteilungssynchronisation erforderlich, z. B. `ou=departments,dc=example,dc=com`. |
:::info
Die Quelle verwendet Bind DN und Bind-Passwort des ausgewählten Authentifikators und speichert keine zweite Kopie der Zugangsdaten.
:::
## Benutzer synchronisieren
Speichern und aktivieren Sie die Quelle und klicken Sie auf **Synchronisieren**. Unter **Aufgabe** können Sie das Ergebnis prüfen und fehlgeschlagene Aufgaben wiederholen.
Die Benutzerzuordnung richtet sich nach **Dieses Feld zum Binden des Benutzers verwenden** im LDAP-Authentifikator. Ändern Sie dieses Feld und die Attributzuordnung nach der ersten Synchronisation nicht, um doppelte Benutzer zu vermeiden.
## Abteilungen synchronisieren
Aktivieren Sie **Abteilungen synchronisieren** und geben Sie die **Abteilungs-Search-DN** ein. Das Plugin sucht Organisationseinheiten darunter, erhält deren Hierarchie und ordnet Benutzer anhand ihres Distinguished Name einer Abteilung zu.
## Synchronisierte Felder
### Benutzerfelder
| LDAP-Attribut oder Einstellung | NocoBase-Feld oder Zweck |
| --- | --- |
| Anmeldekonto-Attribut | Eindeutige Quellkennung und der als Bind-Feld ausgewählte Benutzername oder die E-Mail. Es wird meist aus `{{account}}` im Suchfilter abgeleitet, z. B. `uid`, `sAMAccountName` oder `mail`. Fehlt es, wird der Benutzer übersprungen. |
| Zuordnung zu `username` | Benutzername. |
| Zuordnung zu `nickname` | Anzeigename. |
| Zuordnung zu `email` | E-Mail-Adresse. |
| Zuordnung zu `phone` | Telefonnummer. |
| `distinguishedName`, ersatzweise Eintrags-DN | Nächste synchronisierte Abteilung im DN-Pfad; sie wird als Hauptabteilung gesetzt. |
Bei mehrwertigen LDAP-Attributen wird nur der erste Wert synchronisiert. Nicht zugeordnete Attribute werden nicht synchronisiert.
### Abteilungsfelder
| LDAP-Attribut oder Struktur | NocoBase-Feld oder Zweck |
| --- | --- |
| `objectGUID` | Eindeutige Quellkennung. Organisationseinheiten ohne dieses Attribut werden übersprungen. |
| `ou`, `cn`, `name` | Der erste nicht leere Wert wird als Abteilungsname verwendet. |
| `distinguishedName`, ersatzweise Eintrags-DN | Abteilung und übergeordnete Abteilung zur Bildung der Hierarchie. |
Standardmäßig werden Objekte der Klassen `organizationalUnit` und `container` gesucht. Mehrere Benutzerabteilungen aus `memberOf` sowie Abteilungsverantwortliche werden derzeit nicht synchronisiert.
## Fehlerbehebung
- Prüfen Sie bei fehlenden Benutzern Search DN, Suchbereich, Bind-DN-Berechtigungen und Synchronisationsfilter.
- Konfigurieren Sie bei abgeschnittenen Ergebnissen die Seitengröße und prüfen Sie das Größenlimit des LDAP-Servers.
- Prüfen Sie bei fehlenden Abteilungen, ob die Abteilungssynchronisation aktiviert ist und die Abteilungs-Search-DN alle Organisationseinheiten umfasst.
- Prüfen Sie Aufgabendetails und Anwendungsprotokolle auf Verbindungs-, Bind- und Suchfehler.
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "Fuentes de datos",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "WeCom",
+8 -1
View File
@@ -8,6 +8,13 @@ pkg: '@nocobase/plugin-user-data-sync'
Esta característica le permite registrar y gestionar las fuentes de sincronización de datos de usuario. Por defecto, se proporciona una API HTTP, pero se pueden añadir otras fuentes de datos a través de plugins. Admite la sincronización de datos con las colecciones de **Usuarios** y **Departamentos** por defecto, con la posibilidad de extender la sincronización a otros recursos de destino mediante plugins.
## Fuentes de datos disponibles
- [DingTalk](./sources/dingtalk.md) — Sincronice usuarios y departamentos de DingTalk mediante callback HTTP o modo Stream.
- [LDAP](./sources/ldap.md) — Sincronice usuarios LDAP y unidades organizativas opcionales reutilizando un autenticador LDAP.
- [WeCom](./sources/wecom.md) — Sincronice usuarios y departamentos de WeCom.
- [API HTTP](./sources/api.md) — Envíe usuarios y departamentos mediante la API de sincronización.
## Gestión y Sincronización de Fuentes de Datos
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -40,4 +47,4 @@ Para las tareas de sincronización fallidas, puede hacer clic en **Reintentar**.
En caso de fallos de sincronización, puede solucionar el problema a través de los registros del sistema. Además, los registros de sincronización originales se guardan en el directorio `user-data-sync` dentro de la carpeta de registros de la aplicación.
![](https://static-docs.nocobase.com/202412041205655.png)
![](https://static-docs.nocobase.com/202412041205655.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "Sincronizar datos de usuario desde DingTalk"
description: "Sincronice usuarios y departamentos de DingTalk con NocoBase y reciba cambios incrementales mediante callback HTTP o modo Stream."
keywords: "DingTalk,sincronización de usuarios,sincronización de departamentos,modo Stream,suscripción de eventos,NocoBase"
---
# Sincronizar datos de usuario desde DingTalk
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## Introducción
El plugin **DingTalk** sincroniza los usuarios y departamentos de una organización de DingTalk con NocoBase. Admite sincronización completa manual y actualizaciones incrementales mediante callback HTTP o conexión Stream.
## Antes de comenzar
1. Instale y active los plugins **DingTalk** y **Sincronización de datos de usuario**.
2. Cree una aplicación interna en la consola de desarrolladores de DingTalk.
3. Conceda los permisos de contactos y configure el ámbito de permisos de datos descritos a continuación.
4. Copie el Client ID y el Client Secret. Consulte [Autenticación: DingTalk](/auth-verification/auth-dingtalk/).
## Configurar permisos de contactos y ámbito de datos
Abra **Gestión de permisos** de la aplicación en DingTalk y conceda los siguientes permisos:
| Permiso | Identificador | Obligatorio | Uso |
| --- | --- | --- | --- |
| Leer información de departamentos | `qyapi_get_department_list` | Sí | Leer la lista, los nombres y la jerarquía de departamentos. |
| Leer miembros del departamento | `qyapi_get_department_member` | Sí | Leer los miembros de cada departamento. |
| Leer información de miembros | `qyapi_get_member` | Sí | Leer los detalles y departamentos de los usuarios. |
| Información del móvil del empleado | `fieldMobile` | Al usar el móvil | Sincronizar teléfonos; obligatorio cuando el identificador único es `mobile`. |
| Correo y otros datos personales | `fieldEmail` | No | Necesario para sincronizar direcciones de correo. |
Configure también el **Ámbito de permisos de datos** para incluir los departamentos y empleados que se pueden sincronizar. Seleccione todos los empleados para sincronizar toda la organización.
:::warning
Los permisos de API determinan qué campos se pueden leer; el ámbito de datos determina qué departamentos y empleados se pueden leer. Se deben configurar ambos. Las suscripciones de eventos no sustituyen los permisos de lectura.
:::
Si la misma aplicación también se utiliza para iniciar sesión, conceda además los permisos personales descritos en [Autenticación: DingTalk](/auth-verification/auth-dingtalk/).
## Añadir una fuente de sincronización DingTalk
Vaya a **Usuarios y permisos > Sincronizar**, haga clic en **Añadir** y seleccione **DingTalk**.
| Campo | Descripción |
| --- | --- |
| Nombre de la fuente | Nombre único de la fuente de sincronización. |
| Activada | Inicia la recepción de eventos y permite ejecutar tareas de sincronización. |
| Client ID | Client ID de la aplicación; admite variables de entorno y secretos. |
| Client Secret | Client Secret de la aplicación; admite variables de entorno y secretos. |
| Identificador único del usuario | `mobile` o `unionId`. No cambie la selección después de la primera sincronización. Se omiten usuarios sin el valor elegido. |
| Modo de recepción de eventos | **Callback HTTP** o **modo Stream** para cambios incrementales. |
Guarde y active la fuente; después pulse **Sincronizar** para realizar primero una sincronización completa.
## Elegir el modo de recepción de eventos
### Modo Stream
El modo Stream establece una conexión persistente saliente desde el servidor NocoBase hacia DingTalk. No requiere URL pública de callback, Token ni EncodingAESKey.
1. Seleccione **modo Stream** en la configuración de suscripción de eventos de DingTalk.
2. Suscríbase a los eventos necesarios de usuarios y departamentos.
3. Seleccione **modo Stream** en NocoBase, guarde la fuente y actívela.
El cliente Stream se inicia al activar la fuente. Al actualizarla, desactivarla o eliminarla, la conexión se actualiza o se cierra.
:::info
El servidor NocoBase debe poder conectarse a DingTalk. El modo Stream no necesita proxy inverso ni endpoint público de entrada.
:::
### Callback HTTP
1. Seleccione **Callback HTTP** en NocoBase.
2. Introduzca el Token y EncodingAESKey configurados en DingTalk.
3. Guarde la fuente y copie la **URL de callback de eventos** generada.
4. Configure la URL en DingTalk y suscríbase a los eventos de usuarios y departamentos.
La URL debe ser accesible desde DingTalk. En producción use HTTPS y asegúrese de que el proxy inverso conserve la ruta completa.
## Eventos incrementales compatibles
| Evento | Acción en NocoBase |
| --- | --- |
| `user_add_org` | Crear o actualizar el usuario. |
| `user_modify_org` | Actualizar el usuario. |
| `user_leave_org` | Eliminar el usuario sincronizado. |
| `org_dept_create` | Crear o actualizar el departamento. |
| `org_dept_modify` | Actualizar el departamento y sincronizar sus usuarios. |
| `org_dept_remove` | Eliminar el departamento sincronizado. |
## Campos sincronizados
### Campos de departamento
| Campo de DingTalk | Campo o uso en NocoBase |
| --- | --- |
| `dept_id` | Identificador único del departamento en la fuente. |
| `name` | Nombre del departamento. |
| `parent_id` | Departamento superior. Si está fuera del ámbito de datos, el departamento se sincroniza como raíz. |
### Campos de usuario
| Campo de DingTalk | Campo o uso en NocoBase |
| --- | --- |
| `mobile` o `unionid` | Identificador único de origen y nombre de usuario según la configuración. |
| `name` | Apodo del usuario. |
| `mobile` | Teléfono. Requiere `fieldMobile`. |
| `email`, con alternativa `org_email` | Correo electrónico. Requiere `fieldEmail`. |
| `dept_id_list` | Departamentos del usuario incluidos en el ámbito de datos. |
| `dept_order_list` | Departamento principal. |
| `leader_in_dept` | Indica si el usuario es responsable del departamento correspondiente. |
### Responsables de departamento
NocoBase sincroniza `leader_in_dept` por separado para cada departamento. Un usuario puede ser responsable de varios departamentos y estos no tienen que coincidir con su departamento principal. Al quitar la marca en DingTalk, la siguiente sincronización también la elimina en NocoBase. Los cambios manuales pueden sobrescribirse.
La sincronización completa e incremental usan el mismo mapeo. Actualmente no se sincronizan avatar, cargo ni número de empleado.
## Solución de problemas
- Si faltan datos, compruebe los tres permisos obligatorios y el ámbito de datos.
- Si faltan teléfono o correo, compruebe `fieldMobile` y `fieldEmail`.
- Se omiten los usuarios sin el identificador único configurado.
- Para Stream, revise los logs `Dingtalk stream client starting`, `Dingtalk stream client started` y los errores de conexión.
- Para callback HTTP, compruebe la accesibilidad pública, el Token y EncodingAESKey.
- Ejecute otra sincronización completa después de cambiar permisos o el ámbito de datos.
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "Sincronizar datos de usuario desde LDAP"
description: "Sincronice usuarios y departamentos LDAP con NocoBase reutilizando un autenticador LDAP existente."
keywords: "LDAP,sincronización de usuarios,sincronización de departamentos,Bind DN,Search DN,NocoBase"
---
# Sincronizar datos de usuario desde LDAP
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## Introducción
El plugin **Autenticación: LDAP** permite usar un autenticador LDAP existente como fuente de sincronización. Reutiliza la conexión, Bind DN, Search DN, ámbito de búsqueda y mapeo de atributos, y escribe los usuarios y la jerarquía opcional de departamentos en NocoBase.
## Antes de comenzar
1. Instale y active **Autenticación: LDAP** y **Sincronización de datos de usuario**.
2. Cree y verifique un autenticador LDAP. Consulte [Autenticación: LDAP](/auth-verification/auth-ldap/).
3. Compruebe que el mapeo incluye los campos necesarios, como usuario o correo, apodo y teléfono.
## Añadir una fuente LDAP
Vaya a **Usuarios y permisos > Sincronizar**, haga clic en **Añadir** y seleccione **LDAP**.
| Campo | Descripción |
| --- | --- |
| Nombre de la fuente | Nombre único de la fuente. |
| Activada | Permite ejecutar sincronizaciones LDAP manuales y programadas. |
| Autenticador LDAP | Autenticador existente cuya conexión y mapeo se reutilizan. |
| Filtro de sincronización | Filtro LDAP para usuarios. Valor predeterminado: `(&(objectCategory=person)(objectClass=user))`. |
| Límite de tamaño | Número máximo de entradas por búsqueda; vacío usa el límite del servidor. |
| Tamaño de página | Tamaño para búsquedas LDAP paginadas. |
| Sincronizar departamentos | Sincroniza la jerarquía LDAP como departamentos de NocoBase. |
| DN de búsqueda de departamentos | Obligatorio al sincronizar departamentos, por ejemplo `ou=departments,dc=example,dc=com`. |
:::info
La fuente usa el Bind DN y la contraseña del autenticador seleccionado; no guarda una segunda copia de las credenciales.
:::
## Sincronizar usuarios
Guarde y active la fuente y pulse **Sincronizar**. En **Tarea** puede revisar el resultado y reintentar tareas fallidas.
La coincidencia de usuarios depende de **Usar este campo para vincular al usuario** en el autenticador. Mantenga estable este ajuste y el mapeo después de la primera sincronización para evitar duplicados.
## Sincronizar departamentos
Active **Sincronizar departamentos** e introduzca el **DN de búsqueda de departamentos**. El plugin busca unidades organizativas, conserva su jerarquía y asocia al usuario con un departamento mediante su Distinguished Name.
## Campos sincronizados
### Campos de usuario
| Atributo o ajuste LDAP | Campo o uso en NocoBase |
| --- | --- |
| Atributo de cuenta de acceso | Identificador único de origen y usuario o correo seleccionado para la vinculación. Normalmente se deduce de `{{account}}` en el filtro, por ejemplo `uid`, `sAMAccountName` o `mail`. Se omite el usuario si falta. |
| Mapeo a `username` | Nombre de usuario. |
| Mapeo a `nickname` | Apodo. |
| Mapeo a `email` | Correo electrónico. |
| Mapeo a `phone` | Teléfono. |
| `distinguishedName`, o DN de la entrada | Departamento sincronizado más cercano en la ruta DN, establecido como principal. |
En atributos multivalor solo se sincroniza el primer valor. No se sincronizan atributos sin mapeo.
### Campos de departamento
| Atributo o estructura LDAP | Campo o uso en NocoBase |
| --- | --- |
| `objectGUID` | Identificador único de origen. Se omiten unidades organizativas sin este atributo. |
| `ou`, `cn`, `name` | El primer valor no vacío se usa como nombre del departamento. |
| `distinguishedName`, o DN de la entrada | Identifica el departamento y su superior para construir la jerarquía. |
De forma predeterminada se buscan objetos `organizationalUnit` y `container`. Actualmente no se sincronizan varios departamentos desde `memberOf` ni responsables de departamento.
## Solución de problemas
- Si no hay usuarios, revise Search DN, ámbito, permisos del Bind DN y filtro de sincronización.
- Si el resultado está truncado, configure el tamaño de página y revise los límites del servidor LDAP.
- Si faltan departamentos, compruebe que la sincronización esté activada y que el DN cubra las unidades necesarias.
- Revise los detalles de la tarea y los logs para detectar errores de conexión, enlace y búsqueda.
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "Sources de données",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "WeChat Work",
+8 -1
View File
@@ -8,6 +8,13 @@ pkg: '@nocobase/plugin-user-data-sync'
Cette fonctionnalité vous permet d'enregistrer et de gérer les sources de synchronisation des données utilisateur. Par défaut, une API HTTP est fournie, mais d'autres sources de données peuvent être prises en charge via des plugins. Elle prend en charge la synchronisation des données vers les **collections** Utilisateurs et Départements par défaut, avec la possibilité d'étendre la synchronisation à d'autres ressources cibles à l'aide de plugins.
## Sources de données disponibles
- [DingTalk](./sources/dingtalk.md) — Synchronisez les utilisateurs et départements DingTalk via callback HTTP ou mode Stream.
- [LDAP](./sources/ldap.md) — Synchronisez les utilisateurs LDAP et les unités d'organisation facultatives en réutilisant un authentificateur LDAP.
- [WeCom](./sources/wecom.md) — Synchronisez les utilisateurs et départements WeCom.
- [API HTTP](./sources/api.md) — Envoyez les utilisateurs et départements via l'API de synchronisation.
## Gestion et synchronisation des sources de données
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -40,4 +47,4 @@ Pour les tâches de synchronisation ayant échoué, vous pouvez cliquer sur **R
En cas d'échec de synchronisation, vous pouvez résoudre le problème en consultant les journaux système. De plus, les enregistrements de synchronisation bruts sont stockés dans le répertoire `user-data-sync` sous le dossier des journaux de l'application.
![](https://static-docs.nocobase.com/202412041205655.png)
![](https://static-docs.nocobase.com/202412041205655.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "Synchroniser les données utilisateur depuis DingTalk"
description: "Synchronisez les utilisateurs et départements DingTalk avec NocoBase et recevez les changements via callback HTTP ou mode Stream."
keywords: "DingTalk,synchronisation utilisateur,synchronisation département,mode Stream,abonnement aux événements,NocoBase"
---
# Synchroniser les données utilisateur depuis DingTalk
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## Introduction
Le plugin **DingTalk** synchronise les utilisateurs et départements d'une organisation DingTalk avec NocoBase. Il prend en charge la synchronisation complète manuelle et les mises à jour incrémentielles via callback HTTP ou connexion Stream.
## Prérequis
1. Installez et activez **DingTalk** et **Synchronisation des données utilisateur**.
2. Créez une application interne dans la console développeur DingTalk.
3. Accordez les permissions d'annuaire et configurez le périmètre des données ci-dessous.
4. Copiez le Client ID et le Client Secret. Consultez [Authentification : DingTalk](/auth-verification/auth-dingtalk/).
## Configurer les permissions d'annuaire et le périmètre des données
Dans la **Gestion des permissions** de l'application DingTalk, accordez les permissions suivantes :
| Permission | Identifiant | Requise | Utilisation |
| --- | --- | --- | --- |
| Lire les informations des départements | `qyapi_get_department_list` | Oui | Lire la liste, les noms et la hiérarchie. |
| Lire les membres des départements | `qyapi_get_department_member` | Oui | Lire les membres de chaque département. |
| Lire les informations des membres | `qyapi_get_member` | Oui | Lire les détails et appartenances des utilisateurs. |
| Numéro de mobile des employés | `fieldMobile` | Si le mobile est utilisé | Synchroniser le téléphone ; requis si l'identifiant unique est `mobile`. |
| E-mail et autres informations personnelles | `fieldEmail` | Non | Requis pour synchroniser les adresses e-mail. |
Configurez également le **Périmètre des permissions de données** afin d'inclure les départements et employés à synchroniser. Sélectionnez tous les employés pour une synchronisation complète.
:::warning
Les permissions API déterminent les champs lisibles ; le périmètre de données détermine les départements et employés lisibles. Les deux sont nécessaires. L'abonnement aux événements ne remplace pas les permissions de lecture.
:::
Si la même application sert aussi à la connexion, accordez les permissions personnelles décrites dans [Authentification : DingTalk](/auth-verification/auth-dingtalk/).
## Ajouter une source DingTalk
Accédez à **Utilisateurs et permissions > Synchroniser**, cliquez sur **Ajouter** et sélectionnez **DingTalk**.
| Champ | Description |
| --- | --- |
| Nom de la source | Nom unique de la source. |
| Activée | Démarre la réception des événements et autorise les tâches de synchronisation. |
| Client ID | Client ID de l'application ; variables d'environnement et secrets pris en charge. |
| Client Secret | Client Secret de l'application ; variables d'environnement et secrets pris en charge. |
| Identifiant unique utilisateur | `mobile` ou `unionId`. Ne le modifiez pas après la première synchronisation. Les utilisateurs sans valeur sont ignorés. |
| Mode de réception | **Callback HTTP** ou **mode Stream** pour les changements incrémentiels. |
Enregistrez et activez la source, puis lancez d'abord une synchronisation complète avec **Synchroniser**.
## Choisir le mode de réception des événements
### Mode Stream
Le mode Stream établit une connexion persistante sortante du serveur NocoBase vers DingTalk. Il ne nécessite ni URL publique, ni Token, ni EncodingAESKey.
1. Sélectionnez **mode Stream** dans les paramètres d'abonnement DingTalk.
2. Abonnez-vous aux événements utilisateur et département nécessaires.
3. Sélectionnez **mode Stream** dans NocoBase, enregistrez et activez la source.
Le client Stream démarre lorsque la source est activée. La mise à jour, la désactivation ou la suppression actualise ou ferme la connexion.
:::info
Le serveur NocoBase doit pouvoir se connecter à DingTalk. Aucun proxy inverse ni endpoint entrant public n'est requis.
:::
### Callback HTTP
1. Sélectionnez **Callback HTTP** dans NocoBase.
2. Saisissez le Token et l'EncodingAESKey configurés dans DingTalk.
3. Enregistrez la source et copiez l'**URL de callback des événements**.
4. Configurez cette URL dans DingTalk et abonnez les événements requis.
L'URL doit être accessible par DingTalk. En production, utilisez HTTPS et transmettez le chemin sans modification via le proxy inverse.
## Événements incrémentiels pris en charge
| Événement | Traitement dans NocoBase |
| --- | --- |
| `user_add_org` | Créer ou mettre à jour l'utilisateur. |
| `user_modify_org` | Mettre à jour l'utilisateur. |
| `user_leave_org` | Supprimer l'utilisateur synchronisé. |
| `org_dept_create` | Créer ou mettre à jour le département. |
| `org_dept_modify` | Mettre à jour le département et synchroniser ses utilisateurs. |
| `org_dept_remove` | Supprimer le département synchronisé. |
## Champs synchronisés
### Champs des départements
| Champ DingTalk | Champ ou utilisation NocoBase |
| --- | --- |
| `dept_id` | Identifiant source unique du département. |
| `name` | Nom du département. |
| `parent_id` | Département parent. S'il est hors périmètre, le département est synchronisé comme racine. |
### Champs des utilisateurs
| Champ DingTalk | Champ ou utilisation NocoBase |
| --- | --- |
| `mobile` ou `unionid` | Identifiant source unique et nom d'utilisateur selon la configuration. |
| `name` | Surnom de l'utilisateur. |
| `mobile` | Téléphone. Nécessite `fieldMobile`. |
| `email`, avec repli sur `org_email` | Adresse e-mail. Nécessite `fieldEmail`. |
| `dept_id_list` | Départements de l'utilisateur inclus dans le périmètre de données. |
| `dept_order_list` | Département principal. |
| `leader_in_dept` | Indique si l'utilisateur est responsable du département. |
### Responsables de département
NocoBase synchronise `leader_in_dept` séparément pour chaque département. Un utilisateur peut diriger plusieurs départements, indépendamment de son département principal. La suppression du statut dans DingTalk le supprime à la synchronisation suivante dans NocoBase. Les modifications manuelles peuvent être écrasées.
La synchronisation complète et incrémentielle utilisent le même mappage. L'avatar, le poste et le matricule ne sont pas synchronisés actuellement.
## Dépannage
- En cas de données manquantes, vérifiez les trois permissions requises et le périmètre de données.
- En cas de téléphone ou d'e-mail manquant, vérifiez `fieldMobile` et `fieldEmail`.
- Les utilisateurs sans identifiant unique configuré sont ignorés.
- Pour Stream, recherchez `Dingtalk stream client starting`, `Dingtalk stream client started` et les erreurs de connexion dans les journaux.
- Pour le callback HTTP, vérifiez l'accessibilité, le Token et l'EncodingAESKey.
- Relancez une synchronisation complète après toute modification des permissions ou du périmètre.
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "Synchroniser les données utilisateur depuis LDAP"
description: "Synchronisez les utilisateurs et départements LDAP avec NocoBase en réutilisant un authentificateur LDAP existant."
keywords: "LDAP,synchronisation utilisateur,synchronisation département,Bind DN,Search DN,NocoBase"
---
# Synchroniser les données utilisateur depuis LDAP
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## Introduction
Le plugin **Authentification : LDAP** peut utiliser un authentificateur LDAP existant comme source de synchronisation. Il réutilise la connexion, le Bind DN, le Search DN, la portée de recherche et le mappage des attributs, puis écrit les utilisateurs et, facultativement, la hiérarchie des départements dans NocoBase.
## Prérequis
1. Installez et activez **Authentification : LDAP** et **Synchronisation des données utilisateur**.
2. Créez et testez un authentificateur LDAP. Consultez [Authentification : LDAP](/auth-verification/auth-ldap/).
3. Vérifiez que le mappage contient les champs requis, tels que nom d'utilisateur ou e-mail, surnom et téléphone.
## Ajouter une source LDAP
Accédez à **Utilisateurs et permissions > Synchroniser**, cliquez sur **Ajouter** et sélectionnez **LDAP**.
| Champ | Description |
| --- | --- |
| Nom de la source | Nom unique de la source. |
| Activée | Autorise les synchronisations LDAP manuelles et planifiées. |
| Authentificateur LDAP | Authentificateur existant dont la connexion et le mappage sont réutilisés. |
| Filtre de synchronisation | Filtre LDAP des utilisateurs. Valeur par défaut : `(&(objectCategory=person)(objectClass=user))`. |
| Limite de taille | Nombre maximal d'entrées par recherche ; vide utilise la limite du serveur. |
| Taille de page | Taille des recherches LDAP paginées. |
| Synchroniser les départements | Synchronise la hiérarchie LDAP comme départements NocoBase. |
| DN de recherche des départements | Requis pour les départements, par exemple `ou=departments,dc=example,dc=com`. |
:::info
La source utilise le Bind DN et le mot de passe de l'authentificateur sélectionné ; elle n'enregistre pas une seconde copie des identifiants.
:::
## Synchroniser les utilisateurs
Enregistrez et activez la source, puis cliquez sur **Synchroniser**. Ouvrez **Tâche** pour consulter le résultat et réessayer une tâche en échec.
La correspondance dépend du champ **Utiliser ce champ pour lier l'utilisateur** de l'authentificateur. Gardez ce réglage et le mappage stables après la première synchronisation afin d'éviter les doublons.
## Synchroniser les départements
Activez **Synchroniser les départements** et renseignez le **DN de recherche des départements**. Le plugin recherche les unités d'organisation, conserve leur hiérarchie et associe l'utilisateur au département à partir de son Distinguished Name.
## Champs synchronisés
### Champs des utilisateurs
| Attribut ou réglage LDAP | Champ ou utilisation NocoBase |
| --- | --- |
| Attribut du compte de connexion | Identifiant source unique et nom d'utilisateur ou e-mail choisi pour la liaison. Généralement déduit de `{{account}}` dans le filtre, par exemple `uid`, `sAMAccountName` ou `mail`. L'utilisateur est ignoré si l'attribut manque. |
| Mappage vers `username` | Nom d'utilisateur. |
| Mappage vers `nickname` | Surnom. |
| Mappage vers `email` | Adresse e-mail. |
| Mappage vers `phone` | Téléphone. |
| `distinguishedName`, sinon DN de l'entrée | Département synchronisé le plus proche dans le chemin DN, défini comme principal. |
Pour un attribut multivalué, seule la première valeur est synchronisée. Les attributs non mappés ne sont pas synchronisés.
### Champs des départements
| Attribut ou structure LDAP | Champ ou utilisation NocoBase |
| --- | --- |
| `objectGUID` | Identifiant source unique. Les unités sans cet attribut sont ignorées. |
| `ou`, `cn`, `name` | La première valeur non vide devient le nom du département. |
| `distinguishedName`, sinon DN de l'entrée | Identifie le département et son parent pour construire la hiérarchie. |
Par défaut, la recherche cible les objets `organizationalUnit` et `container`. Les appartenances multiples via `memberOf` et les responsables de département ne sont pas synchronisés actuellement.
## Dépannage
- Si aucun utilisateur n'est trouvé, vérifiez Search DN, portée, permissions du Bind DN et filtre.
- Si le résultat est tronqué, configurez la taille de page et vérifiez les limites du serveur LDAP.
- Si des départements manquent, vérifiez l'activation et la couverture du DN de recherche.
- Consultez les détails de la tâche et les journaux pour les erreurs de connexion, de liaison et de recherche.
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "Sumber Data",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "WeCom",
@@ -11,6 +11,13 @@ keywords: "sinkronisasi data pengguna,sinkronisasi data,HTTP API,WeCom,sumber si
Mendaftarkan dan mengelola sumber sinkronisasi data pengguna. Default menyediakan HTTP API, dan dapat memperluas sumber data lain melalui plugin. Default mendukung sinkronisasi data ke tabel **users** dan **departments**, dan juga dapat memperluas resource target sinkronisasi lain melalui plugin.
## Sumber data yang tersedia
- [DingTalk](./sources/dingtalk.md) — Sinkronkan pengguna dan departemen DingTalk melalui callback HTTP atau mode Stream.
- [LDAP](./sources/ldap.md) — Sinkronkan pengguna LDAP dan unit organisasi opsional dengan menggunakan kembali autentikator LDAP.
- [WeCom](./sources/wecom.md) — Sinkronkan pengguna dan departemen dari WeCom.
- [HTTP API](./sources/api.md) — Kirim data pengguna dan departemen melalui API sinkronisasi.
## Manajemen Sumber Data dan Sinkronisasi Data
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "Menyinkronkan Data Pengguna dari DingTalk"
description: "Sinkronkan pengguna dan departemen DingTalk ke NocoBase serta terima perubahan inkremental melalui callback HTTP atau mode Stream."
keywords: "DingTalk,sinkronisasi pengguna,sinkronisasi departemen,mode Stream,langganan event,NocoBase"
---
# Menyinkronkan Data Pengguna dari DingTalk
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## Pengantar
Plugin **DingTalk** menyinkronkan pengguna dan departemen organisasi DingTalk ke NocoBase. Plugin ini mendukung sinkronisasi penuh manual dan pembaruan inkremental melalui callback HTTP atau koneksi Stream.
## Persiapan
1. Instal dan aktifkan plugin **DingTalk** dan **Sinkronisasi Data Pengguna**.
2. Buat aplikasi internal perusahaan di konsol pengembang DingTalk.
3. Berikan izin kontak dan atur cakupan izin data seperti dijelaskan di bawah.
4. Salin Client ID dan Client Secret. Lihat [Autentikasi: DingTalk](/auth-verification/auth-dingtalk/).
## Mengatur izin kontak dan cakupan izin data
Buka **Manajemen Izin** aplikasi di DingTalk dan berikan izin berikut:
| Izin | Identifikasi | Wajib | Kegunaan |
| --- | --- | --- | --- |
| Membaca informasi departemen | `qyapi_get_department_list` | Ya | Membaca daftar, nama, dan hierarki departemen. |
| Membaca anggota departemen | `qyapi_get_department_member` | Ya | Membaca anggota setiap departemen. |
| Membaca informasi anggota | `qyapi_get_member` | Ya | Membaca detail pengguna dan keanggotaan departemen. |
| Informasi nomor seluler karyawan | `fieldMobile` | Saat memakai nomor seluler | Menyinkronkan nomor telepon; wajib bila pengenal unik adalah `mobile`. |
| Email dan informasi pribadi lainnya | `fieldEmail` | Tidak | Diperlukan untuk menyinkronkan alamat email. |
Atur juga **Cakupan Izin Data** agar mencakup departemen dan karyawan yang boleh disinkronkan. Pilih semua karyawan untuk sinkronisasi seluruh organisasi.
:::warning
Izin API menentukan field yang dapat dibaca, sedangkan cakupan izin data menentukan departemen dan karyawan yang dapat dibaca. Keduanya wajib dikonfigurasi. Langganan event tidak menggantikan izin baca kontak.
:::
Jika aplikasi yang sama juga dipakai untuk login, tambahkan izin informasi pribadi yang dijelaskan di [Autentikasi: DingTalk](/auth-verification/auth-dingtalk/).
## Menambahkan sumber sinkronisasi DingTalk
Buka **Pengguna & Izin > Sinkronkan**, klik **Tambah**, lalu pilih **DingTalk**.
| Field | Keterangan |
| --- | --- |
| Nama sumber | Nama unik sumber sinkronisasi. |
| Aktif | Memulai penerimaan event dan mengizinkan tugas sinkronisasi. |
| Client ID | Client ID aplikasi; mendukung variabel lingkungan dan secret. |
| Client Secret | Client Secret aplikasi; mendukung variabel lingkungan dan secret. |
| Pengenal unik pengguna | `mobile` atau `unionId`. Jangan ubah setelah sinkronisasi pertama. Pengguna tanpa nilai yang dipilih akan dilewati. |
| Mode penerimaan event | **Callback HTTP** atau **mode Stream** untuk perubahan inkremental. |
Simpan dan aktifkan sumber, lalu klik **Sinkronkan** untuk menjalankan sinkronisasi penuh pertama.
## Memilih mode penerimaan event
### Mode Stream
Mode Stream membuat koneksi persisten keluar dari server NocoBase ke DingTalk. URL callback publik, Token, dan EncodingAESKey tidak diperlukan.
1. Pilih **mode Stream** pada pengaturan langganan event DingTalk.
2. Langgan event perubahan pengguna dan departemen yang diperlukan.
3. Pilih **mode Stream** di NocoBase, simpan, dan aktifkan sumber.
Klien Stream dimulai saat sumber diaktifkan. Pembaruan, penonaktifan, atau penghapusan sumber akan memperbarui atau menutup koneksi.
:::info
Server NocoBase harus dapat membuat koneksi keluar ke DingTalk. Mode Stream tidak memerlukan reverse proxy atau endpoint masuk publik.
:::
### Callback HTTP
1. Pilih **Callback HTTP** di NocoBase.
2. Masukkan Token dan EncodingAESKey dari konfigurasi event DingTalk.
3. Simpan sumber dan salin **URL callback event** yang dibuat.
4. Atur URL tersebut di DingTalk dan langgan event pengguna serta departemen.
URL callback harus dapat diakses DingTalk. Gunakan HTTPS di produksi dan pastikan reverse proxy meneruskan path secara utuh.
## Event inkremental yang didukung
| Event | Penanganan di NocoBase |
| --- | --- |
| `user_add_org` | Membuat atau memperbarui pengguna. |
| `user_modify_org` | Memperbarui pengguna. |
| `user_leave_org` | Menghapus pengguna yang disinkronkan. |
| `org_dept_create` | Membuat atau memperbarui departemen. |
| `org_dept_modify` | Memperbarui departemen dan menyinkronkan penggunanya. |
| `org_dept_remove` | Menghapus departemen yang disinkronkan. |
## Field yang disinkronkan
### Field departemen
| Field DingTalk | Field atau kegunaan NocoBase |
| --- | --- |
| `dept_id` | Pengenal unik departemen dari sumber. |
| `name` | Nama departemen. |
| `parent_id` | Departemen induk. Jika di luar cakupan data, departemen disinkronkan sebagai departemen akar. |
### Field pengguna
| Field DingTalk | Field atau kegunaan NocoBase |
| --- | --- |
| `mobile` atau `unionid` | Pengenal unik sumber dan username sesuai konfigurasi. |
| `name` | Nama panggilan pengguna. |
| `mobile` | Nomor telepon. Memerlukan `fieldMobile`. |
| `email`, dengan fallback `org_email` | Alamat email. Memerlukan `fieldEmail`. |
| `dept_id_list` | Keanggotaan departemen dalam cakupan izin data. |
| `dept_order_list` | Departemen utama. |
| `leader_in_dept` | Menandai apakah pengguna adalah penanggung jawab departemen. |
### Penanggung jawab departemen
NocoBase menyinkronkan `leader_in_dept` secara terpisah untuk setiap departemen. Seorang pengguna dapat bertanggung jawab atas beberapa departemen, terlepas dari departemen utamanya. Jika tanda dihapus di DingTalk, sinkronisasi berikutnya akan menghapusnya di NocoBase. Perubahan manual dapat ditimpa.
Sinkronisasi penuh dan inkremental memakai pemetaan field yang sama. Avatar, jabatan, dan nomor karyawan belum disinkronkan.
## Pemecahan masalah
- Jika data kosong atau tidak lengkap, periksa tiga izin wajib dan cakupan izin data.
- Jika nomor seluler atau email kosong, periksa `fieldMobile` dan `fieldEmail`.
- Pengguna tanpa pengenal unik yang dikonfigurasi akan dilewati.
- Untuk Stream, periksa log `Dingtalk stream client starting`, `Dingtalk stream client started`, dan error koneksi.
- Untuk callback HTTP, periksa akses publik, Token, dan EncodingAESKey.
- Jalankan ulang sinkronisasi penuh setelah mengubah izin atau cakupan data.
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "Menyinkronkan Data Pengguna dari LDAP"
description: "Sinkronkan pengguna dan departemen LDAP ke NocoBase dengan menggunakan kembali autentikator LDAP yang ada."
keywords: "LDAP,sinkronisasi pengguna,sinkronisasi departemen,Bind DN,Search DN,NocoBase"
---
# Menyinkronkan Data Pengguna dari LDAP
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## Pengantar
Plugin **Autentikasi: LDAP** dapat memakai autentikator LDAP yang ada sebagai sumber sinkronisasi. Koneksi, Bind DN, Search DN, cakupan pencarian, dan pemetaan atribut digunakan kembali, lalu pengguna dan hierarki departemen opsional ditulis ke NocoBase.
## Persiapan
1. Instal dan aktifkan **Autentikasi: LDAP** dan **Sinkronisasi Data Pengguna**.
2. Buat dan uji autentikator LDAP. Lihat [Autentikasi: LDAP](/auth-verification/auth-ldap/).
3. Pastikan pemetaan atribut mencakup field yang diperlukan, seperti username atau email, nama panggilan, dan telepon.
## Menambahkan sumber LDAP
Buka **Pengguna & Izin > Sinkronkan**, klik **Tambah**, lalu pilih **LDAP**.
| Field | Keterangan |
| --- | --- |
| Nama sumber | Nama unik sumber sinkronisasi. |
| Aktif | Mengizinkan sinkronisasi LDAP manual dan terjadwal. |
| Autentikator LDAP | Autentikator yang koneksi dan pemetaan atributnya digunakan kembali. |
| Filter sinkronisasi | Filter LDAP untuk pengguna. Default: `(&(objectCategory=person)(objectClass=user))`. |
| Batas jumlah | Jumlah maksimum entri per pencarian; kosong memakai batas server. |
| Ukuran halaman | Ukuran halaman pencarian LDAP bertahap. |
| Sinkronkan departemen | Menyinkronkan hierarki LDAP sebagai departemen NocoBase. |
| DN pencarian departemen | Wajib jika departemen diaktifkan, misalnya `ou=departments,dc=example,dc=com`. |
:::info
Sumber memakai Bind DN dan password autentikator yang dipilih serta tidak menyimpan salinan kredensial kedua.
:::
## Menyinkronkan pengguna
Simpan dan aktifkan sumber, lalu klik **Sinkronkan**. Buka **Tugas** untuk melihat hasil dan mencoba ulang tugas yang gagal.
Pencocokan pengguna mengikuti **Gunakan field ini untuk mengikat pengguna** pada autentikator. Pertahankan pengaturan dan pemetaan setelah sinkronisasi pertama untuk mencegah duplikasi.
## Menyinkronkan departemen
Aktifkan **Sinkronkan departemen** dan isi **DN pencarian departemen**. Plugin mencari unit organisasi, mempertahankan hierarki, dan menghubungkan pengguna ke departemen berdasarkan Distinguished Name.
## Field yang disinkronkan
### Field pengguna
| Atribut atau pengaturan LDAP | Field atau kegunaan NocoBase |
| --- | --- |
| Atribut akun login | Pengenal unik sumber dan username atau email yang dipilih sebagai field pengikat. Biasanya disimpulkan dari `{{account}}` pada filter, misalnya `uid`, `sAMAccountName`, atau `mail`. Pengguna dilewati jika atribut tidak ada. |
| Pemetaan ke `username` | Username. |
| Pemetaan ke `nickname` | Nama panggilan. |
| Pemetaan ke `email` | Alamat email. |
| Pemetaan ke `phone` | Nomor telepon. |
| `distinguishedName`, fallback ke DN entri | Departemen terdekat pada path DN dan ditetapkan sebagai departemen utama. |
Untuk atribut multi-nilai, hanya nilai pertama yang disinkronkan. Atribut yang tidak dipetakan tidak disinkronkan.
### Field departemen
| Atribut atau struktur LDAP | Field atau kegunaan NocoBase |
| --- | --- |
| `objectGUID` | Pengenal unik sumber. Unit organisasi tanpa atribut ini dilewati. |
| `ou`, `cn`, `name` | Nilai pertama yang tidak kosong menjadi nama departemen. |
| `distinguishedName`, fallback ke DN entri | Mengidentifikasi departemen dan induknya untuk membangun hierarki. |
Secara default sinkronisasi mencari objek `organizationalUnit` dan `container`. Beberapa keanggotaan dari `memberOf` dan penanggung jawab departemen belum disinkronkan.
## Pemecahan masalah
- Jika pengguna tidak ditemukan, periksa Search DN, scope, izin Bind DN, dan filter sinkronisasi.
- Jika hasil terpotong, atur ukuran halaman dan periksa batas server LDAP.
- Jika departemen hilang, periksa aktivasi dan cakupan DN pencarian departemen.
- Periksa detail tugas dan log untuk error koneksi, bind, dan pencarian.
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "データソース",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "企業WeChat",
+8 -1
View File
@@ -8,6 +8,13 @@ pkg: '@nocobase/plugin-user-data-sync'
ユーザーデータ同期元を登録・管理する機能です。デフォルトではHTTP APIが提供されていますが、プラグインを通じて他のデータソースを拡張することも可能です。デフォルトでは、**ユーザー** コレクションと**部門** コレクションへのデータ同期をサポートしており、プラグインを使って他の同期ターゲットリソースに拡張することもできます。
## 利用可能なデータソース
- [DingTalk](./sources/dingtalk.md) — HTTP コールバックまたは Stream モードで DingTalk のユーザーと部署を同期します。
- [LDAP](./sources/ldap.md) — 既存の LDAP 認証器を再利用して、LDAP ユーザーと任意の組織単位を同期します。
- [WeCom](./sources/wecom.md) — WeCom のユーザーと部署を同期します。
- [HTTP API](./sources/api.md) — 同期 API を通じてユーザーと部署データを送信します。
## データソースの管理とデータ同期
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -40,4 +47,4 @@ pkg: '@nocobase/plugin-user-data-sync'
同期が失敗した場合は、システムログで原因を特定できます。また、アプリケーションのログディレクトリにある `user-data-sync` ディレクトリには、元のデータ同期記録が保存されています。
![](https://static-docs.nocobase.com/202412041205655.png)
![](https://static-docs.nocobase.com/202412041205655.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "DingTalk からユーザーデータを同期する"
description: "DingTalk のユーザーと部署を NocoBase に同期し、HTTP コールバックまたは Stream モードで差分変更を受信します。"
keywords: "DingTalk,ユーザー同期,部署同期,Stream モード,イベント購読,NocoBase"
---
# DingTalk からユーザーデータを同期する
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## はじめに
**DingTalk** プラグインは、DingTalk 組織のユーザーと部署を NocoBase に同期します。手動の完全同期に加え、HTTP コールバックまたは Stream 接続による差分更新をサポートします。
## 事前準備
1. **DingTalk****ユーザーデータ同期** プラグインをインストールして有効化します。
2. DingTalk 開発者コンソールで企業内部アプリを作成します。
3. 以下の連絡先権限を付与し、データ権限範囲を設定します。
4. Client ID と Client Secret をコピーします。[認証:DingTalk](/auth-verification/auth-dingtalk/) も参照してください。
## 連絡先権限とデータ権限範囲を設定する
DingTalk のアプリの **権限管理** で、次の権限を付与します。
| 権限 | 識別子 | 必須 | 用途 |
| --- | --- | --- | --- |
| 部署情報の読み取り | `qyapi_get_department_list` | はい | 部署一覧、名前、階層を読み取ります。 |
| 部署メンバーの読み取り | `qyapi_get_department_member` | はい | 各部署のメンバーを読み取ります。 |
| メンバー情報の読み取り | `qyapi_get_member` | はい | ユーザー詳細と所属部署を読み取ります。 |
| 従業員の携帯電話番号 | `fieldMobile` | 携帯番号使用時 | 電話番号を同期します。一意識別子が `mobile` の場合は必須です。 |
| メールなどの個人情報 | `fieldEmail` | いいえ | メールアドレスを同期する場合に必要です。 |
アプリの **データ権限範囲** に、同期対象の部署と従業員を含めます。組織全体を同期する場合は、すべての従業員を選択します。
:::warning
API 権限は読み取れるフィールドを、データ権限範囲は読み取れる部署と従業員を決定します。両方の設定が必要です。イベント購読は連絡先の読み取り権限の代わりにはなりません。
:::
同じアプリをログインにも使う場合は、[認証:DingTalk](/auth-verification/auth-dingtalk/) に記載された個人情報権限も付与してください。
## DingTalk 同期元を追加する
**ユーザーと権限 > 同期** を開き、**追加** をクリックして **DingTalk** を選択します。
| フィールド | 説明 |
| --- | --- |
| 同期元名 | 同期元の一意な名前です。 |
| 有効 | イベント受信を開始し、同期タスクを実行可能にします。 |
| Client ID | アプリの Client ID。環境変数とシークレットを利用できます。 |
| Client Secret | アプリの Client Secret。環境変数とシークレットを利用できます。 |
| ユーザー一意識別フィールド | `mobile` または `unionId`。初回同期後は変更しないでください。選択した値がないユーザーはスキップされます。 |
| イベント受信モード | 差分変更用の **HTTP コールバック** または **Stream モード**。 |
保存して有効化した後、まず **同期** をクリックして完全同期を実行します。
## イベント受信モードを選択する
### Stream モード
Stream モードは、NocoBase サーバーから DingTalk へ永続的な送信接続を確立します。公開コールバック URL、Token、EncodingAESKey は不要です。
1. DingTalk のイベント購読設定で **Stream モード** を選択します。
2. 必要なユーザーと部署の変更イベントを購読します。
3. NocoBase で **Stream モード** を選択し、保存して有効化します。
同期元を有効にすると Stream クライアントが開始します。更新、無効化、削除時には接続が更新または終了します。
:::info
NocoBase サーバーから DingTalk への外向き接続が必要です。リバースプロキシや公開受信エンドポイントは不要です。
:::
### HTTP コールバック
1. NocoBase で **HTTP コールバック** を選択します。
2. DingTalk で設定した Token と EncodingAESKey を入力します。
3. 同期元を保存し、生成された **イベントコールバック URL** をコピーします。
4. DingTalk に URL を設定し、必要なイベントを購読します。
URL は DingTalk からアクセスできる必要があります。本番環境では HTTPS を使用し、リバースプロキシでパス全体を転送してください。
## 対応する差分イベント
| イベント | NocoBase での処理 |
| --- | --- |
| `user_add_org` | ユーザーを作成または更新します。 |
| `user_modify_org` | ユーザーを更新します。 |
| `user_leave_org` | 同期済みユーザーを削除します。 |
| `org_dept_create` | 部署を作成または更新します。 |
| `org_dept_modify` | 部署を更新し、そのユーザーを同期します。 |
| `org_dept_remove` | 同期済み部署を削除します。 |
## 同期されるフィールド
### 部署フィールド
| DingTalk フィールド | NocoBase のフィールドまたは用途 |
| --- | --- |
| `dept_id` | 同期元内で一意な部署識別子。 |
| `name` | 部署名。 |
| `parent_id` | 親部署。権限範囲外の場合はルート部署として同期されます。 |
### ユーザーフィールド
| DingTalk フィールド | NocoBase のフィールドまたは用途 |
| --- | --- |
| `mobile` または `unionid` | 設定に応じた一意識別子とユーザー名。 |
| `name` | ユーザーのニックネーム。 |
| `mobile` | 電話番号。`fieldMobile` が必要です。 |
| `email`、なければ `org_email` | メールアドレス。`fieldEmail` が必要です。 |
| `dept_id_list` | データ権限範囲内の所属部署。 |
| `dept_order_list` | 主部署。 |
| `leader_in_dept` | 対応する部署の責任者かどうか。 |
### 部署責任者
NocoBase は `leader_in_dept` を部署ごとに同期します。1 人のユーザーが複数の部署責任者になることができ、主部署と一致する必要はありません。DingTalk で責任者指定を解除すると、次回同期で NocoBase 側も解除されます。手動変更は上書きされる場合があります。
完全同期と差分同期は同じフィールドマッピングを使用します。アバター、役職、従業員番号は現在同期されません。
## トラブルシューティング
- データが空または不足する場合は、3 つの必須権限とデータ権限範囲を確認します。
- 電話番号やメールが空の場合は `fieldMobile``fieldEmail` を確認します。
- 一意識別子がないユーザーはスキップされます。
- Stream モードでは `Dingtalk stream client starting``Dingtalk stream client started`、接続エラーをログで確認します。
- HTTP コールバックでは公開アクセス、Token、EncodingAESKey を確認します。
- 権限や範囲を変更した後は完全同期を再実行します。
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "LDAP からユーザーデータを同期する"
description: "既存の LDAP 認証器を再利用して、LDAP のユーザーと部署を NocoBase に同期します。"
keywords: "LDAP,ユーザー同期,部署同期,Bind DN,Search DN,NocoBase"
---
# LDAP からユーザーデータを同期する
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## はじめに
**認証:LDAP** プラグインでは、既存の LDAP 認証器をユーザーデータ同期元として利用できます。接続、Bind DN、Search DN、検索範囲、属性マッピングを再利用し、ユーザーと任意の部署階層を NocoBase に書き込みます。
## 事前準備
1. **認証:LDAP****ユーザーデータ同期** をインストールして有効化します。
2. LDAP 認証器を作成してテストします。[認証:LDAP](/auth-verification/auth-ldap/) を参照してください。
3. ユーザー名またはメール、ニックネーム、電話番号など必要な属性をマッピングします。
## LDAP 同期元を追加する
**ユーザーと権限 > 同期** を開き、**追加** をクリックして **LDAP** を選択します。
| フィールド | 説明 |
| --- | --- |
| 同期元名 | 同期元の一意な名前。 |
| 有効 | 手動およびスケジュールされた LDAP 同期を実行可能にします。 |
| LDAP 認証器 | 接続と属性マッピングを再利用する既存の認証器。 |
| 同期フィルター | ユーザー検索用 LDAP フィルター。既定値:`(&(objectCategory=person)(objectClass=user))`。 |
| サイズ制限 | 1 回の検索で返す最大件数。空の場合はサーバー既定値。 |
| ページサイズ | LDAP ページ検索のページサイズ。 |
| 部署を同期 | LDAP 組織階層を NocoBase の部署として同期します。 |
| 部署 Search DN | 部署同期時に必須。例:`ou=departments,dc=example,dc=com`。 |
:::info
同期元は選択した認証器の Bind DN とパスワードを使用し、接続資格情報を重複保存しません。
:::
## ユーザーを同期する
同期元を保存して有効化し、**同期** をクリックします。**タスク** で結果を確認し、失敗したタスクを再試行できます。
ユーザー照合は認証器の **ユーザーのバインドに使用するフィールド** に従います。重複を避けるため、初回同期後はこの設定と属性マッピングを変更しないでください。
## 部署を同期する
**部署を同期** を有効にし、**部署 Search DN** を入力します。プラグインは組織単位を検索し、階層を保持し、Distinguished Name に基づいてユーザーを部署に関連付けます。
## 同期されるフィールド
### ユーザーフィールド
| LDAP 属性または設定 | NocoBase のフィールドまたは用途 |
| --- | --- |
| ログインアカウント属性 | 一意な同期元識別子、およびバインド用に選択したユーザー名またはメール。通常はフィルターの `{{account}}` から推測されます(例:`uid``sAMAccountName``mail`)。属性がないユーザーはスキップされます。 |
| `username` へのマッピング | ユーザー名。 |
| `nickname` へのマッピング | ニックネーム。 |
| `email` へのマッピング | メールアドレス。 |
| `phone` へのマッピング | 電話番号。 |
| `distinguishedName`、なければエントリ DN | DN パス上で最も近い同期済み部署を主部署に設定します。 |
複数値属性では最初の値だけが同期されます。マッピングされていない属性は同期されません。
### 部署フィールド
| LDAP 属性または構造 | NocoBase のフィールドまたは用途 |
| --- | --- |
| `objectGUID` | 一意な同期元識別子。この属性がない組織単位はスキップされます。 |
| `ou``cn``name` | 最初の空でない値を部署名として使用します。 |
| `distinguishedName`、なければエントリ DN | 部署と親部署を識別して階層を構築します。 |
既定では `organizationalUnit``container` オブジェクトを検索します。`memberOf` による複数部署所属と部署責任者は現在同期されません。
## トラブルシューティング
- ユーザーが返らない場合は Search DN、検索範囲、Bind DN 権限、同期フィルターを確認します。
- 結果が途中で切れる場合はページサイズと LDAP サーバーの制限を確認します。
- 部署が不足する場合は部署同期の有効化と Search DN の範囲を確認します。
- タスク詳細とログで接続、バインド、検索エラーを確認します。
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "Fontes de Dados",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "WeCom",
+8 -1
View File
@@ -8,6 +8,13 @@ pkg: '@nocobase/plugin-user-data-sync'
Este recurso permite que você registre e gerencie fontes de sincronização de dados de usuário. Por padrão, uma API HTTP é fornecida, mas outras **fontes de dados** podem ser suportadas através de **plugins**. Ele suporta a sincronização de dados para as **coleções** de **Usuários** e **Departamentos** por padrão, com a possibilidade de estender a sincronização para outros recursos de destino usando **plugins**.
## Fontes de dados disponíveis
- [DingTalk](./sources/dingtalk.md) — Sincronize usuários e departamentos DingTalk por callback HTTP ou modo Stream.
- [LDAP](./sources/ldap.md) — Sincronize usuários LDAP e unidades organizacionais opcionais reutilizando um autenticador LDAP.
- [WeCom](./sources/wecom.md) — Sincronize usuários e departamentos do WeCom.
- [API HTTP](./sources/api.md) — Envie dados de usuários e departamentos pela API de sincronização.
## Gerenciamento e Sincronização de Fontes de Dados
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -40,4 +47,4 @@ Para tarefas de sincronização que falharam, você pode clicar em "Tentar Novam
Em caso de falhas na sincronização, você pode investigar o problema através dos logs do sistema. Além disso, os registros de sincronização originais são armazenados no diretório `user-data-sync` dentro da pasta de logs da aplicação.
![](https://static-docs.nocobase.com/202412041205655.png)
![](https://static-docs.nocobase.com/202412041205655.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "Sincronizar dados de usuário do DingTalk"
description: "Sincronize usuários e departamentos do DingTalk com o NocoBase e receba alterações por callback HTTP ou modo Stream."
keywords: "DingTalk,sincronização de usuários,sincronização de departamentos,modo Stream,assinatura de eventos,NocoBase"
---
# Sincronizar dados de usuário do DingTalk
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## Introdução
O plugin **DingTalk** sincroniza usuários e departamentos de uma organização DingTalk com o NocoBase. Ele oferece sincronização completa manual e atualizações incrementais por callback HTTP ou conexão Stream.
## Antes de começar
1. Instale e ative os plugins **DingTalk** e **Sincronização de dados de usuário**.
2. Crie um aplicativo interno na central de desenvolvedores do DingTalk.
3. Conceda as permissões de contatos e configure o escopo de dados descritos abaixo.
4. Copie o Client ID e o Client Secret. Consulte [Autenticação: DingTalk](/auth-verification/auth-dingtalk/).
## Configurar permissões de contatos e escopo de dados
Abra o **Gerenciamento de permissões** do aplicativo no DingTalk e conceda:
| Permissão | Identificador | Obrigatória | Finalidade |
| --- | --- | --- | --- |
| Ler informações de departamentos | `qyapi_get_department_list` | Sim | Ler lista, nomes e hierarquia de departamentos. |
| Ler membros de departamentos | `qyapi_get_department_member` | Sim | Ler os membros de cada departamento. |
| Ler informações de membros | `qyapi_get_member` | Sim | Ler detalhes e associações de usuários. |
| Informações de celular dos funcionários | `fieldMobile` | Ao usar celular | Sincronizar telefone; obrigatória quando o identificador é `mobile`. |
| E-mail e outras informações pessoais | `fieldEmail` | Não | Necessária para sincronizar e-mails. |
Configure também o **Escopo de permissões de dados** para incluir os departamentos e funcionários permitidos. Selecione todos os funcionários para sincronizar toda a organização.
:::warning
As permissões de API determinam os campos legíveis; o escopo de dados determina os departamentos e funcionários legíveis. Ambos são necessários. A assinatura de eventos não substitui as permissões de leitura.
:::
Se o mesmo aplicativo também for usado para login, conceda as permissões pessoais descritas em [Autenticação: DingTalk](/auth-verification/auth-dingtalk/).
## Adicionar uma fonte DingTalk
Acesse **Usuários e permissões > Sincronizar**, clique em **Adicionar** e selecione **DingTalk**.
| Campo | Descrição |
| --- | --- |
| Nome da fonte | Nome exclusivo da fonte. |
| Ativada | Inicia a recepção de eventos e permite tarefas de sincronização. |
| Client ID | Client ID do aplicativo; aceita variáveis de ambiente e segredos. |
| Client Secret | Client Secret do aplicativo; aceita variáveis de ambiente e segredos. |
| Identificador único do usuário | `mobile` ou `unionId`. Não altere após a primeira sincronização. Usuários sem o valor escolhido são ignorados. |
| Modo de recepção | **Callback HTTP** ou **modo Stream** para alterações incrementais. |
Salve e ative a fonte; em seguida clique em **Sincronizar** para executar primeiro uma sincronização completa.
## Escolher o modo de recepção de eventos
### Modo Stream
O modo Stream estabelece uma conexão persistente de saída do servidor NocoBase para o DingTalk. Não requer URL pública, Token ou EncodingAESKey.
1. Selecione **modo Stream** nas configurações de eventos do DingTalk.
2. Assine os eventos necessários de usuários e departamentos.
3. Selecione **modo Stream** no NocoBase, salve e ative a fonte.
O cliente Stream inicia quando a fonte é ativada. Atualizar, desativar ou excluir a fonte atualiza ou encerra a conexão.
:::info
O servidor NocoBase precisa estabelecer conexões de saída com o DingTalk. Não é necessário proxy reverso nem endpoint público de entrada.
:::
### Callback HTTP
1. Selecione **Callback HTTP** no NocoBase.
2. Informe o Token e o EncodingAESKey configurados no DingTalk.
3. Salve a fonte e copie a **URL de callback de eventos** gerada.
4. Configure a URL no DingTalk e assine os eventos de usuários e departamentos.
A URL deve ser acessível pelo DingTalk. Em produção use HTTPS e preserve o caminho completo no proxy reverso.
## Eventos incrementais compatíveis
| Evento | Tratamento no NocoBase |
| --- | --- |
| `user_add_org` | Criar ou atualizar o usuário. |
| `user_modify_org` | Atualizar o usuário. |
| `user_leave_org` | Excluir o usuário sincronizado. |
| `org_dept_create` | Criar ou atualizar o departamento. |
| `org_dept_modify` | Atualizar o departamento e sincronizar seus usuários. |
| `org_dept_remove` | Excluir o departamento sincronizado. |
## Campos sincronizados
### Campos de departamento
| Campo do DingTalk | Campo ou finalidade no NocoBase |
| --- | --- |
| `dept_id` | Identificador único do departamento na fonte. |
| `name` | Nome do departamento. |
| `parent_id` | Departamento pai. Se estiver fora do escopo, o departamento será sincronizado como raiz. |
### Campos de usuário
| Campo do DingTalk | Campo ou finalidade no NocoBase |
| --- | --- |
| `mobile` ou `unionid` | Identificador único da fonte e nome de usuário conforme a configuração. |
| `name` | Apelido do usuário. |
| `mobile` | Telefone. Requer `fieldMobile`. |
| `email`, usando `org_email` como alternativa | E-mail. Requer `fieldEmail`. |
| `dept_id_list` | Departamentos do usuário dentro do escopo de dados. |
| `dept_order_list` | Departamento principal. |
| `leader_in_dept` | Indica se o usuário é responsável pelo departamento. |
### Responsáveis por departamentos
O NocoBase sincroniza `leader_in_dept` separadamente para cada departamento. Um usuário pode responder por vários departamentos, independentemente do departamento principal. Ao remover a marca no DingTalk, a próxima sincronização também a remove no NocoBase. Alterações manuais podem ser sobrescritas.
As sincronizações completa e incremental usam o mesmo mapeamento. Avatar, cargo e número de funcionário não são sincronizados atualmente.
## Solução de problemas
- Se os dados estiverem vazios ou incompletos, verifique as três permissões obrigatórias e o escopo de dados.
- Se telefone ou e-mail estiverem vazios, verifique `fieldMobile` e `fieldEmail`.
- Usuários sem o identificador único configurado são ignorados.
- No Stream, procure `Dingtalk stream client starting`, `Dingtalk stream client started` e erros de conexão nos logs.
- No callback HTTP, verifique acesso público, Token e EncodingAESKey.
- Execute nova sincronização completa após alterar permissões ou escopo.
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "Sincronizar dados de usuário do LDAP"
description: "Sincronize usuários e departamentos LDAP com o NocoBase reutilizando um autenticador LDAP existente."
keywords: "LDAP,sincronização de usuários,sincronização de departamentos,Bind DN,Search DN,NocoBase"
---
# Sincronizar dados de usuário do LDAP
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## Introdução
O plugin **Autenticação: LDAP** permite usar um autenticador LDAP existente como fonte de sincronização. Ele reutiliza conexão, Bind DN, Search DN, escopo de pesquisa e mapeamento de atributos, gravando usuários e, opcionalmente, a hierarquia de departamentos no NocoBase.
## Antes de começar
1. Instale e ative **Autenticação: LDAP** e **Sincronização de dados de usuário**.
2. Crie e teste um autenticador LDAP. Consulte [Autenticação: LDAP](/auth-verification/auth-ldap/).
3. Confirme que o mapeamento contém os campos necessários, como usuário ou e-mail, apelido e telefone.
## Adicionar uma fonte LDAP
Acesse **Usuários e permissões > Sincronizar**, clique em **Adicionar** e selecione **LDAP**.
| Campo | Descrição |
| --- | --- |
| Nome da fonte | Nome exclusivo da fonte. |
| Ativada | Permite sincronizações LDAP manuais e agendadas. |
| Autenticador LDAP | Autenticador cuja conexão e mapeamento serão reutilizados. |
| Filtro de sincronização | Filtro LDAP de usuários. Padrão: `(&(objectCategory=person)(objectClass=user))`. |
| Limite de tamanho | Máximo de entradas por pesquisa; vazio usa o limite do servidor. |
| Tamanho da página | Tamanho para pesquisas LDAP paginadas. |
| Sincronizar departamentos | Sincroniza a hierarquia LDAP como departamentos NocoBase. |
| DN de pesquisa de departamentos | Obrigatório para departamentos, por exemplo `ou=departments,dc=example,dc=com`. |
:::info
A fonte usa o Bind DN e a senha do autenticador selecionado e não armazena uma segunda cópia das credenciais.
:::
## Sincronizar usuários
Salve e ative a fonte e clique em **Sincronizar**. Abra **Tarefa** para revisar o resultado e tentar novamente tarefas com falha.
A correspondência segue **Usar este campo para vincular o usuário** no autenticador. Mantenha essa configuração e o mapeamento estáveis após a primeira sincronização para evitar duplicidade.
## Sincronizar departamentos
Ative **Sincronizar departamentos** e informe o **DN de pesquisa de departamentos**. O plugin pesquisa unidades organizacionais, preserva a hierarquia e associa o usuário ao departamento pelo Distinguished Name.
## Campos sincronizados
### Campos de usuário
| Atributo ou configuração LDAP | Campo ou finalidade no NocoBase |
| --- | --- |
| Atributo da conta de login | Identificador único da fonte e usuário ou e-mail selecionado para vínculo. Normalmente inferido de `{{account}}` no filtro, como `uid`, `sAMAccountName` ou `mail`. O usuário é ignorado se o atributo estiver ausente. |
| Mapeamento para `username` | Nome de usuário. |
| Mapeamento para `nickname` | Apelido. |
| Mapeamento para `email` | E-mail. |
| Mapeamento para `phone` | Telefone. |
| `distinguishedName`, ou DN da entrada | Departamento sincronizado mais próximo no caminho DN, definido como principal. |
Para atributos com vários valores, apenas o primeiro é sincronizado. Atributos sem mapeamento não são sincronizados.
### Campos de departamento
| Atributo ou estrutura LDAP | Campo ou finalidade no NocoBase |
| --- | --- |
| `objectGUID` | Identificador único da fonte. Unidades sem esse atributo são ignoradas. |
| `ou`, `cn`, `name` | O primeiro valor não vazio vira o nome do departamento. |
| `distinguishedName`, ou DN da entrada | Identifica o departamento e seu pai para montar a hierarquia. |
Por padrão, são pesquisados objetos `organizationalUnit` e `container`. Vários departamentos via `memberOf` e responsáveis por departamentos não são sincronizados atualmente.
## Solução de problemas
- Se nenhum usuário for retornado, verifique Search DN, escopo, permissões do Bind DN e filtro.
- Se o resultado estiver truncado, configure o tamanho da página e verifique os limites do servidor LDAP.
- Se faltarem departamentos, confira a ativação e a cobertura do DN de pesquisa.
- Consulte os detalhes da tarefa e os logs para erros de conexão, bind e pesquisa.
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "Источники данных",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "WeChat Work",
+8 -1
View File
@@ -8,6 +8,13 @@ pkg: '@nocobase/plugin-user-data-sync'
Эта функция позволяет регистрировать и управлять источниками синхронизации пользовательских данных. По умолчанию доступен HTTP API, но другие источники данных могут быть добавлены с помощью плагинов. По умолчанию поддерживается синхронизация данных с коллекциями **Пользователи** и **Отделы**, а также есть возможность расширить синхронизацию на другие целевые ресурсы с помощью плагинов.
## Доступные источники данных
- [DingTalk](./sources/dingtalk.md) — Синхронизация пользователей и отделов DingTalk через HTTP callback или режим Stream.
- [LDAP](./sources/ldap.md) — Синхронизация пользователей LDAP и дополнительных организационных единиц с использованием существующего LDAP-аутентификатора.
- [WeCom](./sources/wecom.md) — Синхронизация пользователей и отделов WeCom.
- [HTTP API](./sources/api.md) — Передача пользователей и отделов через API синхронизации.
## Управление источниками данных и синхронизация данных
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -40,4 +47,4 @@ pkg: '@nocobase/plugin-user-data-sync'
В случае сбоев синхронизации вы можете устранить проблему с помощью системных журналов. Кроме того, исходные записи синхронизации хранятся в каталоге `user-data-sync` внутри папки журналов приложения.
![](https://static-docs.nocobase.com/202412041205655.png)
![](https://static-docs.nocobase.com/202412041205655.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "Синхронизация пользовательских данных из DingTalk"
description: "Синхронизируйте пользователей и отделы DingTalk с NocoBase и получайте изменения через HTTP callback или режим Stream."
keywords: "DingTalk,синхронизация пользователей,синхронизация отделов,режим Stream,подписка на события,NocoBase"
---
# Синхронизация пользовательских данных из DingTalk
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## Введение
Плагин **DingTalk** синхронизирует пользователей и отделы организации DingTalk с NocoBase. Поддерживаются ручная полная синхронизация и инкрементальные обновления через HTTP callback или соединение Stream.
## Перед началом
1. Установите и включите плагины **DingTalk** и **Синхронизация пользовательских данных**.
2. Создайте внутреннее приложение в консоли разработчика DingTalk.
3. Предоставьте разрешения адресной книги и настройте область данных, описанные ниже.
4. Скопируйте Client ID и Client Secret. См. [Аутентификация: DingTalk](/auth-verification/auth-dingtalk/).
## Настройка разрешений адресной книги и области данных
В разделе **Управление разрешениями** приложения DingTalk предоставьте:
| Разрешение | Идентификатор | Обязательно | Назначение |
| --- | --- | --- | --- |
| Чтение информации об отделах | `qyapi_get_department_list` | Да | Чтение списка, названий и иерархии отделов. |
| Чтение сотрудников отдела | `qyapi_get_department_member` | Да | Чтение сотрудников каждого отдела. |
| Чтение информации о сотрудниках | `qyapi_get_member` | Да | Чтение данных пользователей и их отделов. |
| Мобильные номера сотрудников | `fieldMobile` | При использовании номера | Синхронизация телефона; обязательно, если идентификатор — `mobile`. |
| Электронная почта и личные данные | `fieldEmail` | Нет | Требуется для синхронизации адресов электронной почты. |
Настройте **Область разрешений данных**, включив отделы и сотрудников, доступных для синхронизации. Для всей организации выберите всех сотрудников.
:::warning
Разрешения API определяют доступные поля, а область данных — доступные отделы и сотрудников. Необходимо настроить оба параметра. Подписка на события не заменяет разрешения на чтение.
:::
Если приложение также используется для входа, предоставьте личные разрешения из раздела [Аутентификация: DingTalk](/auth-verification/auth-dingtalk/).
## Добавление источника DingTalk
Откройте **Пользователи и права > Синхронизация**, нажмите **Добавить** и выберите **DingTalk**.
| Поле | Описание |
| --- | --- |
| Имя источника | Уникальное имя источника. |
| Включен | Запускает прием событий и разрешает задачи синхронизации. |
| Client ID | Client ID приложения; поддерживает переменные окружения и секреты. |
| Client Secret | Client Secret приложения; поддерживает переменные окружения и секреты. |
| Уникальный идентификатор пользователя | `mobile` или `unionId`. Не меняйте после первой синхронизации. Пользователи без выбранного значения пропускаются. |
| Режим приема событий | **HTTP callback** или **Stream** для инкрементальных изменений. |
Сохраните и включите источник, затем сначала выполните полную синхронизацию кнопкой **Синхронизировать**.
## Выбор режима приема событий
### Режим Stream
Режим Stream устанавливает постоянное исходящее соединение от сервера NocoBase к DingTalk. Публичный URL, Token и EncodingAESKey не требуются.
1. Выберите **режим Stream** в настройках подписки DingTalk.
2. Подпишитесь на необходимые события пользователей и отделов.
3. Выберите **режим Stream** в NocoBase, сохраните и включите источник.
Клиент Stream запускается при включении источника. Обновление, отключение или удаление источника обновляет или закрывает соединение.
:::info
Сервер NocoBase должен иметь исходящий доступ к DingTalk. Обратный прокси и публичная входящая точка не нужны.
:::
### HTTP callback
1. Выберите **HTTP callback** в NocoBase.
2. Укажите Token и EncodingAESKey из настроек DingTalk.
3. Сохраните источник и скопируйте созданный **URL callback событий**.
4. Настройте URL в DingTalk и подпишитесь на необходимые события.
URL должен быть доступен DingTalk. В рабочей среде используйте HTTPS и передавайте полный путь через обратный прокси.
## Поддерживаемые инкрементальные события
| Событие | Обработка в NocoBase |
| --- | --- |
| `user_add_org` | Создать или обновить пользователя. |
| `user_modify_org` | Обновить пользователя. |
| `user_leave_org` | Удалить синхронизированного пользователя. |
| `org_dept_create` | Создать или обновить отдел. |
| `org_dept_modify` | Обновить отдел и синхронизировать его пользователей. |
| `org_dept_remove` | Удалить синхронизированный отдел. |
## Синхронизируемые поля
### Поля отдела
| Поле DingTalk | Поле или назначение в NocoBase |
| --- | --- |
| `dept_id` | Уникальный идентификатор отдела в источнике. |
| `name` | Название отдела. |
| `parent_id` | Родительский отдел. Если он вне области данных, отдел синхронизируется как корневой. |
### Поля пользователя
| Поле DingTalk | Поле или назначение в NocoBase |
| --- | --- |
| `mobile` или `unionid` | Уникальный идентификатор источника и имя пользователя согласно настройке. |
| `name` | Отображаемое имя пользователя. |
| `mobile` | Телефон. Требует `fieldMobile`. |
| `email`, иначе `org_email` | Электронная почта. Требует `fieldEmail`. |
| `dept_id_list` | Отделы пользователя в пределах области данных. |
| `dept_order_list` | Основной отдел. |
| `leader_in_dept` | Признак руководителя соответствующего отдела. |
### Руководители отделов
NocoBase синхронизирует `leader_in_dept` отдельно для каждого отдела. Пользователь может руководить несколькими отделами независимо от основного отдела. После снятия признака в DingTalk следующая синхронизация снимет его в NocoBase. Ручные изменения могут быть перезаписаны.
Полная и инкрементальная синхронизация используют одинаковое сопоставление. Аватар, должность и табельный номер сейчас не синхронизируются.
## Устранение неполадок
- Если данные пусты или неполны, проверьте три обязательных разрешения и область данных.
- Если отсутствует телефон или почта, проверьте `fieldMobile` и `fieldEmail`.
- Пользователи без настроенного уникального идентификатора пропускаются.
- Для Stream ищите в журналах `Dingtalk stream client starting`, `Dingtalk stream client started` и ошибки соединения.
- Для HTTP callback проверьте публичный доступ, Token и EncodingAESKey.
- После изменения разрешений или области выполните полную синхронизацию повторно.
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "Синхронизация пользовательских данных из LDAP"
description: "Синхронизируйте пользователей и отделы LDAP с NocoBase, используя существующий LDAP-аутентификатор."
keywords: "LDAP,синхронизация пользователей,синхронизация отделов,Bind DN,Search DN,NocoBase"
---
# Синхронизация пользовательских данных из LDAP
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## Введение
Плагин **Аутентификация: LDAP** позволяет использовать существующий LDAP-аутентификатор как источник синхронизации. Повторно используются соединение, Bind DN, Search DN, область поиска и сопоставление атрибутов; пользователи и, при необходимости, иерархия отделов записываются в NocoBase.
## Перед началом
1. Установите и включите **Аутентификация: LDAP** и **Синхронизация пользовательских данных**.
2. Создайте и проверьте LDAP-аутентификатор. См. [Аутентификация: LDAP](/auth-verification/auth-ldap/).
3. Убедитесь, что сопоставлены необходимые поля: имя пользователя или почта, отображаемое имя и телефон.
## Добавление источника LDAP
Откройте **Пользователи и права > Синхронизация**, нажмите **Добавить** и выберите **LDAP**.
| Поле | Описание |
| --- | --- |
| Имя источника | Уникальное имя источника. |
| Включен | Разрешает ручные и плановые синхронизации LDAP. |
| LDAP-аутентификатор | Существующий аутентификатор, соединение и сопоставление которого используются повторно. |
| Фильтр синхронизации | LDAP-фильтр пользователей. По умолчанию: `(&(objectCategory=person)(objectClass=user))`. |
| Ограничение размера | Максимальное число записей за поиск; пусто использует лимит сервера. |
| Размер страницы | Размер страницы для постраничного поиска LDAP. |
| Синхронизировать отделы | Синхронизирует иерархию LDAP как отделы NocoBase. |
| Search DN отделов | Обязателен для отделов, например `ou=departments,dc=example,dc=com`. |
:::info
Источник использует Bind DN и пароль выбранного аутентификатора и не хранит вторую копию учетных данных.
:::
## Синхронизация пользователей
Сохраните и включите источник, затем нажмите **Синхронизировать**. В разделе **Задача** можно просмотреть результат и повторить неудачную задачу.
Сопоставление пользователей следует настройке **Использовать это поле для привязки пользователя**. Не меняйте ее и карту атрибутов после первой синхронизации, чтобы избежать дубликатов.
## Синхронизация отделов
Включите **Синхронизировать отделы** и укажите **Search DN отделов**. Плагин находит организационные единицы, сохраняет иерархию и связывает пользователя с отделом по Distinguished Name.
## Синхронизируемые поля
### Поля пользователя
| Атрибут или настройка LDAP | Поле или назначение в NocoBase |
| --- | --- |
| Атрибут учетной записи | Уникальный идентификатор источника и выбранное для привязки имя пользователя или почта. Обычно определяется по `{{account}}` в фильтре, например `uid`, `sAMAccountName` или `mail`. Пользователь без атрибута пропускается. |
| Сопоставление с `username` | Имя пользователя. |
| Сопоставление с `nickname` | Отображаемое имя. |
| Сопоставление с `email` | Электронная почта. |
| Сопоставление с `phone` | Телефон. |
| `distinguishedName`, иначе DN записи | Ближайший синхронизированный отдел в пути DN, назначаемый основным. |
Для многозначного атрибута синхронизируется только первое значение. Несопоставленные атрибуты не синхронизируются.
### Поля отдела
| Атрибут или структура LDAP | Поле или назначение в NocoBase |
| --- | --- |
| `objectGUID` | Уникальный идентификатор источника. Организационные единицы без него пропускаются. |
| `ou`, `cn`, `name` | Первое непустое значение используется как название отдела. |
| `distinguishedName`, иначе DN записи | Определяет отдел и родителя для построения иерархии. |
По умолчанию ищутся объекты `organizationalUnit` и `container`. Несколько отделов из `memberOf` и руководители отделов сейчас не синхронизируются.
## Устранение неполадок
- Если пользователи не найдены, проверьте Search DN, область, права Bind DN и фильтр.
- Если результат обрезан, настройте размер страницы и проверьте лимиты LDAP-сервера.
- Если отделы отсутствуют, проверьте включение и охват Search DN отделов.
- Просмотрите детали задачи и журналы на ошибки соединения, bind и поиска.
+10
View File
@@ -71,6 +71,16 @@
"type": "custom-link",
"label": "Nguồn dữ liệu",
"items": [
{
"type": "custom-link",
"label": "DingTalk",
"link": "/users-permissions/sync/sources/dingtalk"
},
{
"type": "custom-link",
"label": "LDAP",
"link": "/users-permissions/sync/sources/ldap"
},
{
"type": "custom-link",
"label": "WeCom",
@@ -11,6 +11,13 @@ keywords: "Đồng bộ dữ liệu người dùng,đồng bộ dữ liệu,HTTP
Đăng ký và quản lý các nguồn đồng bộ dữ liệu người dùng. Mặc định cung cấp HTTP API, có thể mở rộng các nguồn dữ liệu khác thông qua plugin. Mặc định hỗ trợ đồng bộ dữ liệu vào bảng **người dùng****phòng ban**, cũng có thể mở rộng các tài nguyên đích đồng bộ khác thông qua plugin.
## Nguồn dữ liệu có sẵn
- [DingTalk](./sources/dingtalk.md) — Đồng bộ người dùng và phòng ban DingTalk qua callback HTTP hoặc chế độ Stream.
- [LDAP](./sources/ldap.md) — Đồng bộ người dùng LDAP và đơn vị tổ chức tùy chọn bằng bộ xác thực LDAP hiện có.
- [WeCom](./sources/wecom.md) — Đồng bộ người dùng và phòng ban từ WeCom.
- [HTTP API](./sources/api.md) — Gửi dữ liệu người dùng và phòng ban qua API đồng bộ.
## Quản lý nguồn dữ liệu và đồng bộ dữ liệu
![](https://static-docs.nocobase.com/202412041043465.png)
@@ -0,0 +1,129 @@
---
pkg: '@nocobase/plugin-auth-dingtalk'
title: "Đồng bộ dữ liệu người dùng từ DingTalk"
description: "Đồng bộ người dùng và phòng ban DingTalk vào NocoBase, đồng thời nhận thay đổi qua callback HTTP hoặc chế độ Stream."
keywords: "DingTalk,đồng bộ người dùng,đồng bộ phòng ban,chế độ Stream,đăng ký sự kiện,NocoBase"
---
# Đồng bộ dữ liệu người dùng từ DingTalk
<PluginInfo commercial="true" name="auth-dingtalk"></PluginInfo>
## Giới thiệu
Plugin **DingTalk** đồng bộ người dùng và phòng ban của tổ chức DingTalk vào NocoBase. Plugin hỗ trợ đồng bộ toàn bộ thủ công và cập nhật tăng dần qua callback HTTP hoặc kết nối Stream.
## Chuẩn bị
1. Cài đặt và kích hoạt plugin **DingTalk****Đồng bộ dữ liệu người dùng**.
2. Tạo ứng dụng nội bộ doanh nghiệp trong bảng điều khiển nhà phát triển DingTalk.
3. Cấp quyền danh bạ và cấu hình phạm vi quyền dữ liệu theo hướng dẫn bên dưới.
4. Sao chép Client ID và Client Secret. Xem [Xác thực: DingTalk](/auth-verification/auth-dingtalk/).
## Cấu hình quyền danh bạ và phạm vi quyền dữ liệu
Mở **Quản lý quyền** của ứng dụng trong DingTalk và cấp các quyền sau:
| Quyền | Mã quyền | Bắt buộc | Mục đích |
| --- | --- | --- | --- |
| Đọc thông tin phòng ban | `qyapi_get_department_list` | Có | Đọc danh sách, tên và cấu trúc phòng ban. |
| Đọc thành viên phòng ban | `qyapi_get_department_member` | Có | Đọc thành viên của từng phòng ban. |
| Đọc thông tin thành viên | `qyapi_get_member` | Có | Đọc chi tiết người dùng và phòng ban trực thuộc. |
| Số điện thoại nhân viên | `fieldMobile` | Khi dùng số điện thoại | Đồng bộ số điện thoại; bắt buộc khi định danh duy nhất là `mobile`. |
| Email và thông tin cá nhân khác | `fieldEmail` | Không | Cần thiết khi đồng bộ địa chỉ email. |
Đồng thời cấu hình **Phạm vi quyền dữ liệu** để bao gồm các phòng ban và nhân viên được phép đồng bộ. Chọn tất cả nhân viên nếu muốn đồng bộ toàn bộ tổ chức.
:::warning
Quyền API quyết định các trường có thể đọc; phạm vi dữ liệu quyết định phòng ban và nhân viên có thể đọc. Cả hai đều phải được cấu hình. Đăng ký sự kiện không thay thế quyền đọc danh bạ.
:::
Nếu ứng dụng cũng được dùng để đăng nhập, hãy cấp thêm quyền thông tin cá nhân theo [Xác thực: DingTalk](/auth-verification/auth-dingtalk/).
## Thêm nguồn đồng bộ DingTalk
Vào **Người dùng & Quyền > Đồng bộ**, nhấp **Thêm** và chọn **DingTalk**.
| Trường | Mô tả |
| --- | --- |
| Tên nguồn | Tên duy nhất của nguồn đồng bộ. |
| Kích hoạt | Bắt đầu nhận sự kiện và cho phép chạy nhiệm vụ đồng bộ. |
| Client ID | Client ID của ứng dụng; hỗ trợ biến môi trường và secret. |
| Client Secret | Client Secret của ứng dụng; hỗ trợ biến môi trường và secret. |
| Định danh người dùng duy nhất | `mobile` hoặc `unionId`. Không thay đổi sau lần đồng bộ đầu tiên. Người dùng thiếu giá trị được chọn sẽ bị bỏ qua. |
| Chế độ nhận sự kiện | **Callback HTTP** hoặc **chế độ Stream** cho thay đổi tăng dần. |
Lưu và kích hoạt nguồn, sau đó nhấp **Đồng bộ** để chạy đồng bộ toàn bộ lần đầu.
## Chọn chế độ nhận sự kiện
### Chế độ Stream
Chế độ Stream thiết lập kết nối duy trì từ máy chủ NocoBase đến DingTalk. Không cần URL callback công khai, Token hoặc EncodingAESKey.
1. Chọn **chế độ Stream** trong cấu hình đăng ký sự kiện DingTalk.
2. Đăng ký các sự kiện thay đổi người dùng và phòng ban cần thiết.
3. Chọn **chế độ Stream** trong NocoBase, lưu và kích hoạt nguồn.
Client Stream khởi động khi nguồn được kích hoạt. Khi cập nhật, tắt hoặc xóa nguồn, kết nối sẽ được làm mới hoặc đóng.
:::info
Máy chủ NocoBase phải có thể kết nối ra ngoài đến DingTalk. Không cần reverse proxy hoặc endpoint nhận công khai.
:::
### Callback HTTP
1. Chọn **Callback HTTP** trong NocoBase.
2. Nhập Token và EncodingAESKey đã cấu hình trong DingTalk.
3. Lưu nguồn và sao chép **URL callback sự kiện** được tạo.
4. Cấu hình URL trong DingTalk và đăng ký các sự kiện người dùng, phòng ban.
URL phải được DingTalk truy cập được. Trong môi trường production, sử dụng HTTPS và đảm bảo reverse proxy chuyển tiếp nguyên đường dẫn.
## Sự kiện tăng dần được hỗ trợ
| Sự kiện | Xử lý trong NocoBase |
| --- | --- |
| `user_add_org` | Tạo hoặc cập nhật người dùng. |
| `user_modify_org` | Cập nhật người dùng. |
| `user_leave_org` | Xóa người dùng đã đồng bộ. |
| `org_dept_create` | Tạo hoặc cập nhật phòng ban. |
| `org_dept_modify` | Cập nhật phòng ban và đồng bộ người dùng của phòng ban. |
| `org_dept_remove` | Xóa phòng ban đã đồng bộ. |
## Các trường được đồng bộ
### Trường phòng ban
| Trường DingTalk | Trường hoặc mục đích trong NocoBase |
| --- | --- |
| `dept_id` | Định danh duy nhất của phòng ban tại nguồn. |
| `name` | Tên phòng ban. |
| `parent_id` | Phòng ban cấp trên. Nếu nằm ngoài phạm vi dữ liệu, phòng ban sẽ được đồng bộ như phòng ban gốc. |
### Trường người dùng
| Trường DingTalk | Trường hoặc mục đích trong NocoBase |
| --- | --- |
| `mobile` hoặc `unionid` | Định danh duy nhất tại nguồn và tên người dùng theo cấu hình. |
| `name` | Biệt danh người dùng. |
| `mobile` | Số điện thoại. Yêu cầu `fieldMobile`. |
| `email`, dự phòng bằng `org_email` | Địa chỉ email. Yêu cầu `fieldEmail`. |
| `dept_id_list` | Các phòng ban của người dùng trong phạm vi quyền dữ liệu. |
| `dept_order_list` | Phòng ban chính. |
| `leader_in_dept` | Người dùng có phải là người phụ trách phòng ban tương ứng hay không. |
### Người phụ trách phòng ban
NocoBase đồng bộ `leader_in_dept` riêng cho từng phòng ban. Một người dùng có thể phụ trách nhiều phòng ban và không nhất thiết là phòng ban chính. Khi trạng thái bị xóa trong DingTalk, lần đồng bộ tiếp theo cũng xóa trạng thái trong NocoBase. Thay đổi thủ công có thể bị ghi đè.
Đồng bộ toàn bộ và tăng dần dùng cùng ánh xạ trường. Avatar, chức danh và mã nhân viên hiện chưa được đồng bộ.
## Khắc phục sự cố
- Nếu dữ liệu trống hoặc thiếu, kiểm tra ba quyền bắt buộc và phạm vi quyền dữ liệu.
- Nếu thiếu số điện thoại hoặc email, kiểm tra `fieldMobile``fieldEmail`.
- Người dùng thiếu định danh duy nhất đã cấu hình sẽ bị bỏ qua.
- Với Stream, kiểm tra log `Dingtalk stream client starting`, `Dingtalk stream client started` và lỗi kết nối.
- Với callback HTTP, kiểm tra khả năng truy cập công khai, Token và EncodingAESKey.
- Chạy lại đồng bộ toàn bộ sau khi thay đổi quyền hoặc phạm vi dữ liệu.
@@ -0,0 +1,81 @@
---
pkg: '@nocobase/plugin-auth-ldap'
title: "Đồng bộ dữ liệu người dùng từ LDAP"
description: "Đồng bộ người dùng và phòng ban LDAP vào NocoBase bằng cách sử dụng lại bộ xác thực LDAP hiện có."
keywords: "LDAP,đồng bộ người dùng,đồng bộ phòng ban,Bind DN,Search DN,NocoBase"
---
# Đồng bộ dữ liệu người dùng từ LDAP
<PluginInfo commercial="true" name="auth-ldap"></PluginInfo>
## Giới thiệu
Plugin **Xác thực: LDAP** có thể sử dụng bộ xác thực LDAP hiện có làm nguồn đồng bộ. Kết nối, Bind DN, Search DN, phạm vi tìm kiếm và ánh xạ thuộc tính được dùng lại, sau đó người dùng và cấu trúc phòng ban tùy chọn được ghi vào NocoBase.
## Chuẩn bị
1. Cài đặt và kích hoạt **Xác thực: LDAP****Đồng bộ dữ liệu người dùng**.
2. Tạo và kiểm tra bộ xác thực LDAP. Xem [Xác thực: LDAP](/auth-verification/auth-ldap/).
3. Đảm bảo ánh xạ thuộc tính có các trường cần thiết như tên người dùng hoặc email, biệt danh và số điện thoại.
## Thêm nguồn LDAP
Vào **Người dùng & Quyền > Đồng bộ**, nhấp **Thêm** và chọn **LDAP**.
| Trường | Mô tả |
| --- | --- |
| Tên nguồn | Tên duy nhất của nguồn đồng bộ. |
| Kích hoạt | Cho phép đồng bộ LDAP thủ công và theo lịch. |
| Bộ xác thực LDAP | Bộ xác thực có kết nối và ánh xạ thuộc tính được dùng lại. |
| Bộ lọc đồng bộ | Bộ lọc LDAP cho người dùng. Mặc định: `(&(objectCategory=person)(objectClass=user))`. |
| Giới hạn số lượng | Số entry tối đa mỗi lần tìm kiếm; để trống dùng giới hạn máy chủ. |
| Kích thước trang | Kích thước trang cho tìm kiếm LDAP phân trang. |
| Đồng bộ phòng ban | Đồng bộ cấu trúc LDAP thành phòng ban NocoBase. |
| DN tìm kiếm phòng ban | Bắt buộc khi đồng bộ phòng ban, ví dụ `ou=departments,dc=example,dc=com`. |
:::info
Nguồn sử dụng Bind DN và mật khẩu của bộ xác thực đã chọn và không lưu thêm một bản sao thông tin kết nối.
:::
## Đồng bộ người dùng
Lưu và kích hoạt nguồn, sau đó nhấp **Đồng bộ**. Mở **Nhiệm vụ** để xem kết quả và thử lại nhiệm vụ thất bại.
Việc khớp người dùng tuân theo **Sử dụng trường này để liên kết người dùng** của bộ xác thực. Giữ nguyên thiết lập và ánh xạ sau lần đồng bộ đầu tiên để tránh tạo người dùng trùng lặp.
## Đồng bộ phòng ban
Bật **Đồng bộ phòng ban** và nhập **DN tìm kiếm phòng ban**. Plugin tìm các đơn vị tổ chức, giữ nguyên cấu trúc và liên kết người dùng với phòng ban dựa trên Distinguished Name.
## Các trường được đồng bộ
### Trường người dùng
| Thuộc tính hoặc thiết lập LDAP | Trường hoặc mục đích trong NocoBase |
| --- | --- |
| Thuộc tính tài khoản đăng nhập | Định danh duy nhất tại nguồn và tên người dùng hoặc email được chọn để liên kết. Thường suy ra từ `{{account}}` trong bộ lọc, ví dụ `uid`, `sAMAccountName` hoặc `mail`. Người dùng bị bỏ qua nếu thiếu thuộc tính. |
| Ánh xạ tới `username` | Tên người dùng. |
| Ánh xạ tới `nickname` | Biệt danh. |
| Ánh xạ tới `email` | Địa chỉ email. |
| Ánh xạ tới `phone` | Số điện thoại. |
| `distinguishedName`, dự phòng bằng DN của entry | Phòng ban đã đồng bộ gần nhất trên đường dẫn DN và được đặt làm phòng ban chính. |
Với thuộc tính nhiều giá trị, chỉ giá trị đầu tiên được đồng bộ. Các thuộc tính không được ánh xạ sẽ không được đồng bộ.
### Trường phòng ban
| Thuộc tính hoặc cấu trúc LDAP | Trường hoặc mục đích trong NocoBase |
| --- | --- |
| `objectGUID` | Định danh duy nhất tại nguồn. Đơn vị tổ chức thiếu thuộc tính này sẽ bị bỏ qua. |
| `ou`, `cn`, `name` | Giá trị không rỗng đầu tiên được dùng làm tên phòng ban. |
| `distinguishedName`, dự phòng bằng DN của entry | Xác định phòng ban và phòng ban cấp trên để xây dựng cấu trúc. |
Theo mặc định, đồng bộ tìm các object `organizationalUnit``container`. Nhiều phòng ban từ `memberOf` và người phụ trách phòng ban hiện chưa được đồng bộ.
## Khắc phục sự cố
- Nếu không có người dùng, kiểm tra Search DN, phạm vi, quyền Bind DN và bộ lọc đồng bộ.
- Nếu kết quả bị cắt, cấu hình kích thước trang và kiểm tra giới hạn máy chủ LDAP.
- Nếu thiếu phòng ban, kiểm tra việc kích hoạt và phạm vi của DN tìm kiếm phòng ban.
- Xem chi tiết nhiệm vụ và log để tìm lỗi kết nối, bind và tìm kiếm.