# Skript-Abfragen ob bestimmter User angemeldet



## chipset (13 Oktober 2014)

Hey Leute, 
brauch mal eure Hilfe. Wie kann ich über ein Skript abfragen, ob ein bestimmter User angemeldet ist? Mit If...then?

So:
If SL_VerifyUser = TRUE Then
*'<Bedieneingriff>
*'<Bedienmeldung>
Else
*'<Fehlermeldung>
End If

???
Danke


----------



## PN/DP (13 Oktober 2014)

Du meinst ein Skript für welche HMI-Software?

In WinCC flexible und höchstwahrscheinlich auch TIA geht z.B. dieses VBS-Skript:

```
Dim user, msgText

[COLOR="#008000"]'aktuell angemeldeten Benutzername lesen[/COLOR]
GetUserName user
If user = "" Then user = "<no_user>" [COLOR="#008000"]'kein Benutzer angemeldet[/COLOR]

If user = "admin" Then [COLOR="#008000"]'Benutzer "admin" ist angemeldet - der darf bedienen[/COLOR]
  [COLOR="#008000"]'Bedieneingriff[/COLOR]
  '...
  [COLOR="#008000"]'und Systemmeldung ausgeben[/COLOR]
  ShowSystemAlarm "Benutzer 'admin' hat die Heizung ausgeschaltet."
Else
  [COLOR="#008000"]'Systemmeldung ausgeben[/COLOR]
  msgText = "O¬ Benutzer '" & user & "' hat keine Berechtigung für diese Aktion."
  ShowSystemAlarm msgText
End If
```
Du könntest auch im Aufgabenplaner beim Ereignis "Benutzerwechsel" den Benutzername in eine Stringvariable einlesen und dann ständig anzeigen.

Siehe auch die Hilfe zur Systemfunktion LeseBenutzername bzw. GetUserName

Harald


----------



## chipset (14 Oktober 2014)

Hallo Harald Danke mal soweit. Also so in etwa habe ich mir das vorgestellt : Wenn ein bestimmter Benutzer angemeldet ist, dann wird ein Taster sichtbar.
So habe ich es jetzt mal, funktioniert jedoch nicht :


```
Dim userName, userPassword

GetUserName userName
GetPassword userPassword

if userName = "Meister" and userPassword= 2345
  then Anzeige = true ' Anzeige ist ein Bit
```


----------



## Krumnix (14 Oktober 2014)

Welche Software? Das wäre mal gut zu wissen!
Mit Anzeige = true ist es auch nicht getan. Ist das eine externe Variable oder ein Script-Interne?

Paar mehr Infos brauchen wir schon!


----------



## chipset (14 Oktober 2014)

Sorry, WinCC 2008 SP3. Die Variable ist eine inetrne Variable. Ich habs auch mit setbit probiert, geht baer auch nicht.


----------



## PN/DP (14 Oktober 2014)

OK, WinCC flexible also.

In WinCC flexible löse ich Benutzergruppen-abhängige Sichtbarkeit dadurch, daß ich im Aufgabenplaner beim Ereignis "Benutzerwechsel" mit der Systemfunktion LeseGruppennummer die Benutzergruppen-Nummer in eine Panelvariable einlese und diese Variable dann bei den betreffenden Objekten ganz normal bei Animation Sichtbarkeit verwende.

Soll Dein Button tatsächlich nur für genau einen von vielen Benutzern sichtbar werden?
Dann könntest Du extra nur für diesen einen Benutzer eine eigene Benutzergruppe nutzen oder neu anlegen.

Du könntest Dich auch an das Ereignis "Benutzerwechsel" hängen und da ein Skript aufrufen, was den aktuellen Benutzername liest und davon abhängig einer Steuervariable für die Sichtbarkeit einen Wert zuweist:

```
Dim user

GetUserName user  [COLOR="#008000"]'aktuell angemeldeten Benutzername lesen[/COLOR]
If user = "chipset" Then
  SmartTags("showMySpecialButton") = 1  [COLOR="#008000"]'Button sichtbar schalten[/COLOR]
Else
  SmartTags("showMySpecialButton") = 0  [COLOR="#008000"]'Button unsichtbar schalten[/COLOR]
End If
```
Die Variable "showMySpecialButton" verwendest Du dann bei der Animation > Sichtbarkeit Deines Buttons, dann ist der nur sichtbar, solange der Benutzer "chipset" angemeldet ist. Willst Du die Information, daß der Benutzer "chipset" angemeldet ist, auch noch anderswo verarbeiten, dann kannst Du die Variable auch allgemeiner "chipset_ist_angemeldet" nennen.

Mit der Benutzergruppen-Nummer oder der Abfrage des genauen Benutzernamens kann man Objekte so sichtbar schalten, daß angemeldete Admins die nicht zu sehen bekommen... ich habe immer eine eigene Benutzergruppe "Programmierer" für solche Zwecke.


Übrigens brauchst und solltest Du das Benutzer-Passwort nicht verarbeiten, sonst müßtest Du bei Passwort-Änderung das Runtime-Projekt ändern. Und: Wenn der Benutzer angemeldet ist, dann wird er wohl auch das korrekte Passwort benutzt haben.

Harald


----------



## chipset (15 Oktober 2014)

Ok ich glaub jetzt passt alles. Danke


----------



## repök (15 Oktober 2014)

Naja, anstatt eine variable anzulegen, könnte er auch direkt die properties bestimmen.


----------



## PN/DP (15 Oktober 2014)

repök schrieb:


> Naja, anstatt eine variable anzulegen, könnte er auch direkt die properties bestimmen.


Das ist leider keine gute Idee - einmal Bildwechsel oder erneuter Bildaufbau und die Properties sind wieder auf Startwert. Man müßte dann bei jedem "Bild aufgebaut" die Zuweisungen der Properties erneut ausführen und sich dazu den letzten Wert in Variablen merken ...

Harald


----------



## repök (16 Oktober 2014)

ist das so? ich hab das verchiedenlich so gemacht - das ist mir noch nicht aufgefallen.


----------



## PN/DP (16 Oktober 2014)

Ja das ist so, zumindest in allen WinCCflex-Versionen die ich kenne.
Beim Bildaufbau werden die Properties aller Bildobjekte auf die Startwerte aus der Projektierung gesetzt. Dynamisch zugewiesene Werte gehen verloren.

Harald


----------

