AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
18.10.17 - 09:36:23
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 9
| |-+  ND9: Entwicklung (Moderatoren: Axel, eknori, Thomas Schulte, koehlerbv, m3)
| | |-+  Sichtbarkeit von Outline-Einträgen von Benutzer festlegen lassen
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Sichtbarkeit von Outline-Einträgen von Benutzer festlegen lassen  (Gelesen 370 mal)
thomas_k
Frischling
*
Offline Offline

Beiträge: 34



« am: 03.10.17 - 11:38:27 »

Hallo zusammen, ich benötige wieder mal eure Hilfe!

Ich muss folgende Anforderung bearbeiten:
Ein Eintrag in einer Outline soll nur für bestimmte Personen, Gruppen bzw. Rollen sichtbar sein.
Diese Personen, Gruppen... sollen aber nicht von mir im Designer festgelegt werden, sondern soll ein bestimmter Benutzer bestimmen und ändern können.
Meine Idee hierzu wäre eine einfache Maske mit einem Feld zu erstellen. In diesem Feld wählt der bestimmte Benutzer dann alle Personen... aus welche den Eintrag in der Outline sehen dürfen.
Kann ich dann beim Outline-Eintrag mithilfe der Formelsprache auf dieses eine Feld zugreifen, um somit die Sichtbarkeit zu regeln? Wenn ja, wie?
Oder gibt's zu dieser Anforderung vielleicht andere, bessere Lösungswege?

Vielen Dank schon mal im Voraus!
« Letzte Änderung: 13.10.17 - 11:27:19 von thomas_k » Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20435



« Antworten #1 am: 03.10.17 - 11:50:34 »

Ja, sowas kannst Du machen, in dem Du die Outline in eine Maske einbettest, die das Feld mit den Zugriffsinformationen ausliest und bereitstellt.

Aber: Was willst Du damit erreichen? Was willst Du damit ggf. unsichtbar machen? Ein Outline Entry ist ja nicht der einzige Weg, wie man an Elemente einer Datenbank heran kommt. Alles lässt sich so also nicht verbergen (wenn auch manches).

Bernhard
Gespeichert
Tode
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 5785


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #2 am: 03.10.17 - 17:14:52 »

Also grundsätzlich würde ich eine Rolle erstellen, die Du einer Gruppe in der ACL zuweist. Jetzt gibst Du der berechtigten Person das Recht, die Gruppe zu bearbeiten geben... wie Bernhard schon sagt: security ist das nicht, aber manchmal will man ja nur übersichtlichkeit und gar nicht „echte“ Sicherheit.

Ach so: der Hidewhen geht dann auf @IsNotMember( „[Rolle]“; @UserNamesList)
Gespeichert

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2457



« Antworten #3 am: 03.10.17 - 17:53:11 »

Um nah an Deinem Vorschlag zu bleiben, ein Dokument zu erstellen, in dem die Zugriffsberechtigten eingetragen werden, hilft Dir vielleicht diese Formel, die sinngemäß so bei uns produktiv eingesetzt wird.

Code:
_tmp := @DbColumn (""; @DbName; "vorgaben"; 1);
_tmp2 := @If (@IsError (_tmp); ""; @DbLookup (""; @DbName; "vorgaben"; _tmp [1]; "Berechtigte"));
_tmp3 := @If (@IsError (_tmp2); ""; _tmp2);
!@Username = _tmp3

oder wie Torsten schreibt

@IsNotMember (@Username; _tmp3)

_tmp holt sich aus einer Ansicht "vorgaben" die Schlüssel der Vorgabendokumente (es könnte z.B. nur eines in der Ansicht stehen)
_tmp2 liest sich den Inhalt des Feldes "Berechtigte" aus dem ersten Vorgabendokument
_tmp3 ist das fehlerbereinigte Ergebnis von _tmp2

Das ist nur eine mögliche Variante. In der Ansicht könnten auch die UniversalIDs stehen, dann könnte man mit @GetDocField arbeiten. Oder das Vorgabendokument hat einen festen Schlüssel, dann spart man sich das @DBColumn. Oder man nimmt ein Profildokument dafür, oder , oder ...
Gespeichert
ronka
Aktives Mitglied
***
Offline Offline

Beiträge: 105


Was macht der hier denn, muß der überall sein ?


WWW
« Antworten #4 am: 03.10.17 - 19:33:51 »

Würde in den Formel
!@Username = _tmp3

in

!@Username *= _tmp3

Damit mehrfach werten kontrolliert werden anstatt einzelnwerten.
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2457



« Antworten #5 am: 04.10.17 - 08:50:37 »

@Username ist aber kein Mehrfachwert, *= nutzt man, um zwei Mehrfachwerte miteinander zu vergleichen (schadet aber auch nichts, wenn es sich um einen einfachen Wert handelt, dann vergisst man es nicht)

Folgendes habe ich gerade getestet

Einfachwert gegen Mehrfachwert, kein Unterschied
"b" = "a" : "b" : "c"   -> @True     "b" *= "a" : "b" : "c"   -> @True
"b" = "d" : "e" : "f"   -> @False     "b" *= "d" : "e" : "f"   -> @False

auch umgekehrt kein Unterschied
"a" : "b" : "c" = "b"   -> @True     "a" : "b" : "c" *= "b"   -> @True
"d" : "e" : "f" = "b"   -> @False     "d" : "e" : "f" *= "b"   -> @False

Mehrfachwerte gegeneinander
"a" : "b" = "a" : "b" : "c"   -> @True     "a" : "b" *= "a" : "b" : "c"   -> @True
"a" : "b" = "d" : "e" : "f"   -> @False     "a" : "b" *= "d" : "e" : "f"   -> @False
"b" : "e" = "a" : "b" : "c"   -> @False     "b" : "e" *= "a" : "b" : "c"   -> @True
"b" : "e" = "d" : "e" : "f"   -> @True     "b" : "e" *= "d" : "e" : "f"   -> @True

Die rote Zeile gibt ein m.E. falsches Ergebnis, bei Mehrfachwerten auf beiden Seiten sollte man unbedingt *= verwenden.
Gespeichert
ronka
Aktives Mitglied
***
Offline Offline

Beiträge: 105


Was macht der hier denn, muß der überall sein ?


WWW
« Antworten #6 am: 04.10.17 - 09:30:16 »

Zur Information *= ist einen Listen vergleichsoperator.

Wenn ein Element vor den vergleicher gleich ist an ein Element danach ist das Ergebnis True.

In der Formel sprache ist ALLES eine Liste, auch ein einzelnes element ist einen Liste, deshalb kann mann a auch als a[0] ansprechen.

In Lotusscript ist das anders.

Deshalb ist der linie mit den Roten inhalt mit den "nur" = zeichen aber nicht falsch. Dort wird einen Liste mit einen Liste verglichen, und die beide Listen sind nicht identisch, das allerdings die zeile drunter ( "b" : "e" = "d" : "e" : "f"   -> @True ) angibt, finde ich erstaunlich, weil eigentlich musste der nach operator auch False anzeigen. Hier dürfte den Teilstring eigentlich kein True zurück geben, wäre meine mathematische denkweise wenigstens.

Trotzdem, im Normalfall schadet der nutzung des *= nichts, ausser mann kontrolliert explizit auf Listen bezogen würde. Dort ist dann auch den Reinfolge noch zuberücksichtigen.
Gespeichert
Tode
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 5785


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #7 am: 04.10.17 - 11:46:26 »

@Peter: Wegen "falsches Ergebnis"... Dazu muss man wissen, wie die Formelsprache intern Listen vergleicht.

Zwei Listen werden intern immer so verglichen:

1. Schritt: Listen gleich lang machen. Wenn beide Listen unterschiedlich viele Elemente haben, dann wird bei der kürzeren Liste das letzte Element so oft wiederholt, bis beide Listen gleich lang sind.

Vergleicht man also "a" mit "b" : "c" : "a", dann wird intern die erste "Liste" auf "a" : "a" : "a" verlängert.

aus "b" : "e" im Vergleich mit "a" : "b" : "c" wird dann also "b" : "e" : "e".

2. Schritt: Beim normalen "="- Operator werden nun die Werte "Zeilenweise" verglichen: Der erste mit dem ersten, der zweite mit dem zweiten, usw. Ergibt sich dabei EIN Match, ist der Vergleich @True:

Im ersten Beispiel also:
"a" = "b"
"a" = "c"
"a" = "a" ---> @True

Im zweiten:
"b" = "a"
"e" = "b"
"e" = "c"

==> Kein Treffer, also @False

Der Permutationsoperator "*=" führt einen Vergleich JEDES Elements der Liste mit JEDEM Element der anderen Liste durch.
Im zweiten Beispiel finden also folgende Vergleiche statt:

"b" = "a"
"b" = "b" --> @True
"b" = "c"
"e" = "a"
"e" = "b"
"e" = "c"

Bei langen Listen bedeutet das eine MENGE Vergleiche...

Das ist übrigens auch der Grund, warum der Vergleich einer Liste mit einem Einzelwert immer @True liefert, wenn der Wert mindestens einmal in der Liste ist.

Diese Art des Vergleiches ist übrigens auch die Ursache, warum

a != b was anderes liefert als !(a = b)... a != b ist bei zwei Listen, bei denen nicht alle Elemente identisch sind, immer @True, während !(a = b) nur dann @True ist, wenn KEINES der Elemente aus a mit b übereinstimmt...

« Letzte Änderung: 04.10.17 - 12:00:46 von Tode » Gespeichert

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
ronka
Aktives Mitglied
***
Offline Offline

Beiträge: 105


Was macht der hier denn, muß der überall sein ?


WWW
« Antworten #8 am: 04.10.17 - 12:10:03 »

Yep, den listen gleich lang machen ist dabei der Trick.

Jetzt ein wenig off-Topic, aber durchaus auch nutzlich.

Den kann mann auch für das erstellen von einen Präfix oder Suffix sehr schon verwenden.

Strassen := "Lang" : "Kurz" : "mittel";
MitSuffix := Strassen + "weg";
MitPräfix := "Am " +  Strassen;

Liefert dann für MitSuffix "Langweg" : "Kurzweg" : "mittelweg"

mit Präfix "Am Lang" : "Am Kurz" : "Am mittel"

Und bei misschungen Formen dann
Gesamt := ( "Bei " : "Am " ) + Strassen ;

Bringt das "Bei Lang" : "Am Kurz" : "Am mittel"

Ich habe solche "Spielchen" auch real schon eingesetzt für bestimmte kontrollen, z.B. beim @Implode und @Explode sind diesen dingen sehr sinnvoll einsetzbar wenn mann einen spezifischen inhalt irgendwo suchen muss aber nicht durch alle einzelne elementen gehen möchte.
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2457



« Antworten #9 am: 04.10.17 - 12:35:30 »

@Torsten: Danke, so tief hatte ich mir da noch nie Gedanken gemacht Wink , ist dann aber logisch.

Enthält ein Vergleichswert nur ein Element, könnte man auf "*" verzichten, sollte man aber nicht, weil man es sonst vergisst (wie ich meistens ...), es sei denn, man will wirklich absolute Gleichheit überprüfen, bei der auch die Reihenfolge relevant ist
Gespeichert
thomas_k
Frischling
*
Offline Offline

Beiträge: 34



« Antworten #10 am: 12.10.17 - 09:36:00 »

Danke für die vielen Rückmeldungen und sorry wegen meiner späten Antwort, ich war für längere Zeit nicht mehr im Büro.

Normalerweise erstellen wir hierfür auch eine Rolle, dies wäre am Einfachsten. Jedoch möchte dies der Administrator in diesem Fall nicht, da in dieser Datenbank bereits einige Usergruppen mit verschiedenen Rechten ausgestattet wurden, einige betroffene User in mehreren Usergruppen sind und er durch diese Verschachtelung nicht genau weiß, an welche User er nun welche Rollen verteilen muss. (oder so ähnlich  Wink )

Ich denke nun, man könnte auch die betroffenen User in einem Profildokument auswählen und die User aus einem Feld im Profildokument mit @GetProfileField auslesen. Mithilfe von @Contains kann man dann vergleichen ob @Username in dem Feld im Profildokument vorkommt.
Jetzt wäre es noch praktisch wenn man nicht jeden Benutzer einzeln eingeben muss, sondern eventuell eine Benutzergruppe auswählen kann.
Gibt's einen Befehl in der Formelsprache in der man abfragen kann, ob ein bestimmter Benutzer in einer Benutzergruppe enthalten ist? Ich bin bei einer Suche danach leider nicht fündig geworden  Ahnungslos

LG
Gespeichert
Tode
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 5785


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #11 am: 12.10.17 - 13:25:49 »

Vergleiche @Usernameslist mit dem Gruppennamen... gilt immer für den aktuell angemeldeten Benutzer...
Gespeichert

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
thomas_k
Frischling
*
Offline Offline

Beiträge: 34



« Antworten #12 am: 13.10.17 - 11:27:06 »

Danke Torsten, dass ist genau das, was i benötigt habe  Smiley Smiley

Somit habe ich das nun nach Wunsch des Auftraggebers einbauen können  Smiley

Danke an alle für die Hilfe!
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: