Autor Thema: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....  (Gelesen 2462 mal)

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Hallo,
der Wert von entry ist hier immer Nothing, obwohl das eigentlich garnicht sein kann.... kann sich jemmand nen reim darauf machen was ich da falsch machen??

Sub Entering(Source As Field)
Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim uidoc As NotesUIDocument
   Dim acl As NotesACL   
   Dim entry As NotesACLEntry
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Set entry = acl.GetEntry( session.CommonUserName )
   If entry Is Nothing Then
      Msgbox "NIX"
      Call uidoc.GotoField( "DocText" )
      Exit Sub
   Else      
      If entry.IsRoleEnabled( "[Manager]" ) Then
         Msgbox "Gude"   
      Else
         Msgbox "Keine Berechtigung zum Ändern!!"
         Call uidoc.GotoField( "DocText" )         
      End If
   End If
End Sub


Gruß Björn

Offline Raymond

  • Aktives Mitglied
  • ***
  • Beiträge: 111
  • Geschlecht: Männlich
  • who notes?
    • Who Notes
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #1 am: 09.12.04 - 13:54:27 »
Hallo Björn

so wie ich dein Code interpretiere, möchtest du rausfinden ob jemand eine bestimmte Rolle hat oder nicht...

Das geht am Besten über @UserRoles. Da du das Ganze in LotusScript benötigst, könntest du untenstehende Funktion verwenden...

Gruss

Raymond

Function fnCheckRole( Byval vs_Role As String) As Integer
' -----------------------------------------------------
' INPUTS
' vs_Role : The role to be validated for a user
   
' RETURNS
' True : If the role is assigned to the current user
' False : If the role is not assigned to the current user
   
' USAGE
' e.g. : if fnCheckRole("[DbAdmin]") then ..........
' -----------------------------------------------------
   
   Dim lv_Roleslist As Variant
   
   fnCheckRole = False
' Gets all roles assigned to the current user in lv_Roleslist
   lv_Roleslist = Evaluate("@UserRoles")
' Converts the role to be checked to uppercase
   vs_Role = Ucase(vs_Role)
' Iterates through all roles in the lv_Roleslist
   Forall lv_Roles In lv_Roleslist
      If vs_Role = Ucase(lv_Roles) Then
' If role assigned matches the role to be checked then sets the function to true
         fnCheckRole = True
         Exit Forall
      End If
   End Forall
End Function
aktuelle Versionen:
Lotus Notes/Domino 7
Lotus Notes/Domino 8.5

dabei seit Lotus Notes 4.x

Driri

  • Gast
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #2 am: 09.12.04 - 13:56:07 »
CommonUserName gibt den gekürzten Namen zurück, in der ACL steht aber wohl der Abbreviated Name drin.

Erstell dir ein OBjekt vom Typ NotesName und schieß da session.UserName rein. Dann kannst Du mit NotesName.Abbreviated den Namen korrekt auslesen und dann solltest Du damit auch nen Treffer in der ACL bekommen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #3 am: 09.12.04 - 14:01:31 »
Wobei das mit dem Prüfen von Namen in der ACL immer Primitiv-Murks ist, weil es die Verwendung von Gruppen verhindert.

Ich würde unbedingt dem Vorschlag von Raymond folgen.

Bernhard
« Letzte Änderung: 09.12.04 - 14:07:14 von koehlerbv »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #4 am: 09.12.04 - 14:08:56 »
Ich sehe gerade, dass Du in Deinem Code das uidoc nicht instantiierst.

Weiterhin: Warum arbeitest Du nicht mit zwei Feldern - eins editierbar, das andere berechnet zur Anzeige ? Je nach Rollen blendest Du das eine oder das andere ein. Das dürfte die zukünftigen User nicht so verwirren wie der verzweifelte Versuch, den Cursor in ein eigentlich ja bearbeitbares Feld zu bringen ...

Bernhard

klaussal

  • Gast
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #5 am: 09.12.04 - 14:16:50 »
noch eine Lösung:
Code
Function userHasRole (Rolle As String) As Variant
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim acl As NotesACL
	Dim aclEntry As NotesACLEntry
	
	Dim eval  As Variant
	Dim varReturn As Variant
	Dim varCompare As String
	Dim Rolle2 As String
	Dim subString As String
	
	On Error Goto userHasRoleError
	Set db = session.currentDatabase
	
	Rolle2 = "[" + Rolle + "]"
	
	eval = Evaluate("@UserNamesList")
	varReturn = Arraygetindex( eval, Rolle2)
	
	If Isnull(varReturn)   Then
		'Messagebox "nix Gefunden"
		userHasRole = False
	Else
		'Messagebox "gefunden"
		userHasRole = True
	End If
	On Error Goto 0
	Exit Function
	
userHasRoleError:
	userHasRole = False
	Msgbox "Fehler in userHasRole: " & Cstr(Err) & ": " & Error$
	Exit Function
	
End Function

klaus

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #6 am: 09.12.04 - 15:42:52 »
danke klaus,
die funktioniert geht super! ähm nur noch eine frage.... die funktion sollte mir doch eigentlich true oder false zurückgeben, oder???

ich füge sie nochmal hier ein.....


Function userHasRole (Rolle As String) As Variant
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim aclEntry As NotesACLEntry
   
   Dim eval  As Variant
   Dim varReturn As Variant
   Dim varCompare As String
   Dim Rolle2 As String
   Dim subString As String
   
   On Error Goto userHasRoleError
   Set db = session.currentDatabase
   
   Rolle2 = "[Manager]"
   
   eval = Evaluate("@UserNamesList")
   varReturn = Arraygetindex( eval, Rolle2)
   
   If Isnull(varReturn)   Then
      Messagebox "nix Gefunden"
      userHasRole = False
   Else
      Messagebox "gefunden"
      userHasRole = True
   End If
   On Error Goto 0
   Exit Function
   
userHasRoleError:
   userHasRole = False
   Msgbox "Fehler in userHasRole: " & Cstr(Err) & ": " & Error$
   Exit Function
   
End Function



----------------------------------------------------------------------------------------

ich ruf die dann so auf:

Sub Entering(Source As Field)
   userHasRole (Rolle)
   
End Sub

-----------------------------------------------------------------------------------------

Rolle  sollte doch jetzt irgend nen wert haben, mit dem ich weiter arbeiten kann, oder?? sorry, bin ein nub...



Danke Björn



Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #7 am: 09.12.04 - 15:47:38 »
Die Funktion liefert auch einen boolschen Wert zurück, Du musst sie nur richtig einsetzen:

- Schmeiss die Rolle2 aus der Function
- Ruf sie wie folgt auf:
   If userHasRole ("[Manager]") = True then
       ... Deine Reaktion ...
    Else
       ... Deine andere Reaktion
    End If

HTH,
Bernhard

Offline Raymond

  • Aktives Mitglied
  • ***
  • Beiträge: 111
  • Geschlecht: Männlich
  • who notes?
    • Who Notes
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #8 am: 09.12.04 - 15:48:45 »
Im Gegensatz zu einer Sub hat eine Function ein Rückgabewert, den kannst du einer Variablen vom entsprechenden Typ zuweisen. in deinem Fall also


varX = userHasRole(Role)


in varX steht nun der Rückgabewert von der Funktion userHasRole.

Gruss - Raymond
aktuelle Versionen:
Lotus Notes/Domino 7
Lotus Notes/Domino 8.5

dabei seit Lotus Notes 4.x

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #9 am: 09.12.04 - 15:54:36 »
Björn, aber nochmal meine Frage: Warum treibst Du soviel Aufwand anstatt mit zwei Feldern zu arbeiten (vor allem, da Du noch nicht fit in LotusScript bist) ? Das ist doch erheblich übersichtlicher und für den User vor allem ergonomischer, wie ich oben schon geschrieben habe.
Aber es mag ja einen Grund geben, der bei Dir dagegen steht.

Bernhard

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #10 am: 09.12.04 - 16:01:12 »
das mit dem verstecken was du mir vorgeschlagen hast hab ich bei zwei feldern innerhalb der maske so gemacht, aber bei diesem hab ich diverse bedingungen und da hab ich gestern so lange rumgemacht aber ich hab das nicht alles in die formel reingebracht und da ich die formeln sowieso nicht so mag.....


dank euch allen, es funktioniert jetzt!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #11 am: 09.12.04 - 16:30:05 »
Hm, Formeln solltest Du nicht nicht mögen.
Und was Du via LS (und fraglicher Ergonomie) hinbekommst, geht dann allemal auch mit @functions.

Bernhard

Offline Spalter

  • Aktives Mitglied
  • ***
  • Beiträge: 109
  • Mit der Lizenz zum Löschen!!!
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #12 am: 10.12.04 - 09:07:03 »
Hallo zusammen,

rein sicherheitstechnisch ist das aber doch alles nicht 100% wasserdicht.

Das Script könnte man doch über den Debugger abfangen, wenn man da an der richtigen Stelle abbricht.

Das Feld berechnet zur Anzeige könnte man doch mit einem Smart Icon manipulieren.

Wirkliche Sicherheit gibts nur auf Dokumentenebene mit Leser- und Autorenfeldern - oder?!

Gruß
Spalter ;)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Feld schützen, wenn bestimmte Rolle nicht vorhanden ist....
« Antwort #13 am: 10.12.04 - 09:08:21 »
Richtig, und wirklich echten Datenschutz gibts nur mit Verschlüsselung
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz