Search the FirstSpirit Knowledge Base
Hallo Community,
ich bin heute auf ein Problem gestoßen und weiss nicht mehr weiter.
Folgende Situation:
Ich möchte auf einer "nur" für den CC zugelassenen Seite den aktuellen Nutzer (FirstSpirit User) erhalten um Userspezifische Links zu generieren.
$CMS_SET(set_project, #global.getProject())$
$CMS_SET(set_userService, set_project.getUserService())$
$CMS_SET(set_user, set_userService.getUser())$
Liefert mir im SiteArchitect den richtigen User, jedoch im CC den User mit dem Login-Name: SYSTEM.
Wie ist es mit möglich, den aktuell angemeldeten FirstSpirit-User im CC zu identifizieren?
FS-Version: 5.2.515
Viele Grüße aus Dresden,
Marcel
Hallo Herr Liebgott,
dies lässt sich bislang leider nicht innerhalb des Template-Codes lösen, da dieser in der tat vom System-User erzeugt wird.
Allerdings ist es möglich mit einem Servlet die Connection zu nutzen um den aktuellen Nutzer zu erfragen:
Als JSP:
<%@page import="de.espirit.firstspirit.access.*" %>
<%@page import="de.espirit.firstspirit.access.project.Project" %>
<%
Connection connection = (Connection) session.getAttribute("connection");
UserService userService = project.getUserService();
User user = userService.getUser();
%>
Gruß,
Christopher Kozielski
Hi Christopher,
leider ist das keine Lösung für uns - da der Kunde kein JSP im Einsatz hat.
Ein möglicher Workaround wäre theoretisch, ein Script, welches aus dem aktuellen Context den User ans Template zurückliefert.
Leider funktioniert dies auch nicht, wie ich es mir erhofft hatte.
//!Beanshell
return context.getUserService().getUser();
$CMS_SET(set_currentUser)$
$CMS_REnDER(script: "scriptname")$
$CMS_END_SET$
Oder mache ich hier etwas falsch?
Viele Grüße,
Marcel
Hallo Marcel,
über die Generierung ist dies leider nicht möglich (dabei macht es auch keinen unterscheid ob der User-Service im Ausgabe-Kanal direkt oder in einem Script-Template abgefragt wird).
Eine Erklärung warum das so ist, findet sich in diesem Thread: https://community.e-spirit.com/message/27502#27502
Allerdings wäre es möglich ein Executable mit der WE-API anzusprechen und den aktuellen Nutzer hierüber zurückzugeben:
top.WE_API.Common.execute('class:MyExecutable', function() { | |
// your callback code | |
}); |
Das "MyExecutable" (Die du selbst implementierungen musst und in der Module-Xml als public-Component hinzufügen musst) ist vom Typ "GuiScriptContext" und enthält den aktuellen Nutzer den CC-Session.
Der Rückgabewert muss Serialisierbar und wird als JavaScript-Object zurückgegeben, den du im Callback dann nutzen kannst.
Gruß,
Christopher
Hi Christopher,
das ist schon richtig, die WE-API hatte ich auch im Kopf. Jedoch kann ich dann leider keine FS-Basisfunktionalitäten wie $CMS_REF()$ mehr drauf ausführen.
Kann ein e-Spirit Kollege hier den entscheidenten Tip geben?
Viele Grüße,
Marcel
Hi Marcel,
andere als die von Christoph aufgezeigten Möglichkeiten gibt es meines Wissens leider nicht.
Die benutzerabhängigen Links kannst du innerhalb der Executable zusammenbauen und zurückgeben.
Viele Grüße
Tim
Hi Tim,
wie macht Ihr das denn imm ContentCreator mit den User -> irgendwas ändern -> speichern und dann einen Eintrag in die History (z.B.).
Viele Grüße
Marcel
Hi Marcel,
du meinst, wie der richtige User für die Versionshistorie ermittelt wird? Wie das im Detail abläuft kann ich dir leider nicht sagen, weil ich nicht am Kernprodukt arbeite.
Aber konzeptionell ist es recht einfach: Alles, was du im Ausgabekanal schreibst, wird während der Vorschau-Generierung ausgewertet. Die Generierung findet auf dem Server statt und wird von einem technischen User durchgeführt. Der konkrete User, für den die Vorschau generiert wird, ist dabei aktuell nicht zu ermitteln.
Das gilt jedoch nicht für sonstige Aktionen, die vom User im Client angestoßen werden. Änderungen an Inhalten oder halt auch der Aufruf einer Executable über die Web-API geschieht im Namen des Users.
Ich hoffe das war halbwegs verständlich.
Viele Grüße
Tim
Hallo Marcel,
ist diese Frage noch offen? Benötigst du noch weitere Hilfe oder konnte Tim dir bereits weiterhelfen? In diesem Fall wäre es super, wenn du seine "richtige Antwort" entsprechend markierst.
Solltest du selbst eine Lösung gefunden haben, wäre es toll, wenn du sie hier bereitstellst.
Viele Grüße,
Sebastian
Hi Sebastian,
leider gibt es aus eurer Sicht keine offizielle Lösung für meine Problematik - demnach muss ich es hinnehmen.
Viele Grüße
Marcel