# eCockpit - Feststellen ob man durch Benutzerverwaltung eingelogged ist



## shg (15 November 2020)

Hallo liebes Forum,

folgendes Problem:

-Ich verwende eCockpit in der aktuellen Version, PLC-Programm + VISU
-Benutzerverwaltung angelegt
-Methoden/Variablen etc. wie Visuelems. etc. sind bekannt
-Problem:
   -> Ich möchte im ST feststellen, ob ich gegenwärtig als z. B. Admin eingelogged bin!

   -> Abfrage von Visuelems.GetCurrentGroupID o. ä. führen zu einem scheinbar instabilen Zustand der Variable
        (Sie hüpft zwischen verschiedenen Zuständen), Wenn ich z. B. einen Stringvergleich wie
        ...GetFullCurrentUserName <> ''... mache, zeigt sich das gleiche Bild.

   -> Bibliotheken habe ich gewälzt (gibt es eigentlich eine übersichtliche Doku?) - ohne Erfolg.

-Habt Ihr ne Idee?

Danke - Gruß

Stefan


----------



## mzs (15 November 2020)

Hallo 

Hast du es schon mit der Variabel .VisuElems.CurrentUserName versucht ?

Gruss mzs


----------



## shg (15 November 2020)

Hi,

ja hab' ich - gleiches Problem- Variable hüpft... Trotzdem danke!


----------



## shg (15 November 2020)

In der Zwischenzeit hab' ich ein Bisschen herumprobiert - was macht man denn sonst an einem sonnigen Sonntag Nachmittag...
Vielleicht hilft es jemandem...

Folgende Erkenntnis: Das Programm der Visu und das des PLC laufen ja zueinander Asynchron - ab und zu wenn das PLC die Variable 
Visuelems.GetCurrentUserName abfragen will, greift es scheinbar ins Leere... so die Vermutung.

Habe folgenden Workaround probiert:

Nehmen wir an, wir haben ein Programm mit drei Visu-Seiten, nennen wir sie A, B und C.
Das Programm verfügt über eine Benutzerverwaltung.
Ich logge mich ein.
Ich logge mich aus... nun wird eine Seite angewählt, die nicht Bestandteil der anzuzeigenden Visu-Seiten ist, z. B. D.
Das funktioniert indem ich in der Benutzerverwaltung anwähle, dass beim Ausloggen die Standardseite angezeigt werden soll;
diese wiederum kann im Prg-Baum unter Visualisierungsmanager -> Webvisu angegeben werden.
Nun kann ich im PLC-Prg die Variable Visuelems.Currentvisu auf Gleichheit mit der Seite 'D' abfragen. Ist dies der Fall,
kann ich automatisch zu Seite A weiterschalten (if-Abfrage) und gleichzeitig das Signal der Gleichheitsabfrage dazu verwenden um
festzustellen, dass ich ausgeloggt bin...

Achso...warum der ganze Spaß mit der zusätzlichen Seite...? Nun, würde ich nach dem Ausloggen gleich auf die Seite A schalten
und das Signal 'Ausgeloggt' absetzen, gibt es keine Unterscheidungsmöglichkeit zwischen I) Ausgeloggt weil ich die Seite A per Hand
angewählt habe oder II) Ausgeloggt weil ich mich bei der Benutzerverwaltung ausgeloggt habe; daher die Zusätzliche Seite um dieses
Unterschreidungskriterium festzumachen.

Ja, ich weiß, kein guter Stil... aber der Weck heiligt die Mittel.

Ideen, Ratschläge, Anregungen, Wünsche... bitte!!


----------



## ccore (16 November 2020)

Ich habe es eben mal nachgestellt. Folgender Workaround wäre m.E. einfacher.

Lege eine WSTRING Varibale an

```
PROGRAM PLC_PRG
VAR
xAdminLog:BOOL;
username : WSTRING := "Administrator";
END_VAR
```


```
IF Visuelems.CurrentFullUserName <> username THEN
    xAdminLog := FALSE;
ELSE 
 xAdminLog := TRUE;    
END_IF
```

Damit funktioniert es.


----------



## shg (16 November 2020)

Hallo CCore,

danke - das hat prima geklappt!

Trotzdem hätte ich noch eine Frage: Ich habe ja ebenfalls die Abfrage Visuelems.CurrentFullUserName <>... durchgeführt, aber
so:

IF Visuelems.CurrentFullUserName <> STRING_TO_WSTRING('Administrator') THEN...

Aber auf diese Weise klappt es nicht - dann wechselt der Inhalt der Variable schnell zwischen verschiedenen Zuständen;
Kannst Du mir sagen warum das so ist? Liegt es evtl. daran, dass die von mir verwendete Typumwandlung nicht funktioniert,
wenn ich einen String wie 'Administrator' in einen WString umwandeln will... (da für einen Wstring prinzipiell eine Variable die
ein offenes Array enthält angelegt werden muss oder so...?).

Danke für Deine Hilfe, bin froh, dass es klappt!
Gruß


----------



## ccore (20 November 2020)

Sorry für die späte Antwort, war Unterwegs. 
Schau mal hier:
https://www.codesys-blog.com/tipps/wstring-zeichenketten/


----------

