Automatisieren der Seitensperrung in AEM Sites Cloud mit einer benutzerdefinierten Erweiterung des universellen Editors
In diesem Artikel wird erläutert, wie Sie die Seitensperre in Adobe Experience Manager (AEM) Sites as a Cloud Service automatisieren können, indem Sie eine benutzerdefinierte universelle Editor-Erweiterung und einen authentifizierten AEM-Service erstellen und sicherstellen, dass Seiten nach der ersten Inhaltsänderung von einem Autor gesperrt werden.
Beschreibung description
Umgebung
Adobe Experience Manager as a Cloud Service (alle Versionen)
Problem/Symptome
- Unternehmen möchten möglicherweise Konflikte bei der gleichzeitigen Bearbeitung verhindern, indem sie eine AEM Sites-Seite nach der ersten beabsichtigten Inhaltsänderung automatisch sperren, anstatt sich auf das manuelle Sperren oder Sperren beim Öffnen der Seite zu verlassen.
- Seiten werden nach der ersten Bearbeitung nicht automatisch gesperrt, was manuelle Aktionen erfordert und das Risiko von Bearbeitungskonflikten erhöht.
Ursache
Die standardmäßige AEM Page Lock-Erweiterung im universellen Editor stellt keine öffentliche API für Automatisierung oder Erweiterung bereit. Die unterstützte Automatisierung erfordert eine benutzerdefinierte universelle Editor-Erweiterung und einen kundeneigenen AEM-Service, der dokumentierte APIs verwendet, um Seiten nach Inhaltsänderungen zu sperren.
Lösung resolution
Gehen Sie wie folgt vor, um das Problem zu beheben.
-
Erstellen Sie eine benutzerdefinierte Erweiterung des universellen Editors.
- Verwenden Sie die Erweiterungspunkte des universellen Editors, um auf das erste beabsichtigte oder persistierte Inhaltsänderungsereignis zu warten. Trigger beim Öffnen oder Auswählen nicht sperren.
- Beispiel (Pseudo-Code):
code language-none editor.on('contentChanged', (event) => { if (!pageLocked) { lockPage(event.pagePath); pageLocked = true; } }); -
Implementieren Sie einen kundeneigenen AEM-Service.
- Erstellen Sie einen Server-seitigen OSGi-Dienst oder ein Sling-Servlet in AEM, der Endpunkte für Folgendes bereitstellt:
- Überprüfen des aktuellen Sperrstatus
- Erfassen einer Seitensperre
- Freigeben einer Seitensperre
- Verwenden Sie die AEM WCM PageManager-API zum Sperren und Entsperren von Vorgängen. Beispiel (Java):
code language-none PageManager pageManager = resourceResolver.adaptTo(PageManager.class); Page page = pageManager.getPage(pagePath); if (page != null && !page.isLocked()) { page.lock(); } -
Authentifizieren Sie Anfragen mit der Identität des Editors.
- Die Erweiterung des universellen Editors sollte das IMS-Bearer-Token des aktuellen Editors als Autorisierungs-Kopfzeile an den AEM-Endpunkt weiterleiten.
- Stellen Sie sicher, dass der Granite Bearer Authentication Handler von AEM aktiviert und so konfiguriert ist, dass er die im Token vorhandene OAuth-Client-ID akzeptiert.
- Der AEM-Service muss den ResourceResolver der Anfrage verwenden (z. B. request.getResourceResolver()), um sicherzustellen, dass die Sperre dem Editor und nicht einem Service-Benutzer zugeordnet wird.
-
Handhabung von Sperrkonflikten und Berechtigungen.
- Validieren Sie den Seitenpfad und lösen Sie die Seite auf.
- Überprüfen Sie, ob die Seite bereits gesperrt ist und von wem.
- Gibt eine klare Antwort zurück, wenn die Sperre nicht abgerufen werden kann (z. B. bereits von einem anderen Autor gesperrt).
- Erzwingen von AEM-Berechtigungen und CSRF-Schutz.
-
Aktualisieren Sie den Editor-Status.
- Aktualisieren Sie nach einem erfolgreichen Sperrvorgang die Benutzeroberfläche des universellen Editors, um den neuen Sperrstatus widerzuspiegeln.
- Zeigt eine Meldung an, dass die Seite bereits von einem anderen Autor gesperrt wurde.
-
Entsperren Sie die Seite vor der Veröffentlichung.
- Autoren sollten die Seite vor der Veröffentlichung manuell entsperren, damit Workflow-Prozesse fortgesetzt werden können.
Um die Erweiterung zu überprüfen, testen Sie sie, indem Sie eine Seite im universellen Editor bearbeiten. Vergewissern Sie sich, dass die Seite nach der ersten Inhaltsänderung gesperrt ist und nur der Bearbeitungsautor sie entsperren kann.