Dokumente verstecken mit Autoren-/Leserfeld

  • Hallo Leute,


    ich möchte in meiner Datenbank die Möglichkeit haben, dass User, Dokumente vor anderen Usern verstecken können - aber ich als Admin, soll trotzdem immer alle Dokumente sehen.
    Zu diesem Zwecke verwende ich in jedem Dokument Autoren-, Leserfelder.


    Zur Realisierung wären 2 Varianten möglich:
    Variante A:
    --------------
    AllAuthors: =Autorenfeld (Dropdown zur Auswahl)
    AllReaders: =Leserfeld (Dropdown zur Auswahl) / falls hier ein Stern eingtragen ist, kann's jeder lesen.


    Problem:
    Ich bin Admin und wenn mich der Dokument-Ersteller aus AllAuthors/AllReaders rausnimmt, kann ich das Dokument nicht mehr sehen/editieren. :evil:


    Lösung:
    Ich erstelle ein 2. verstecktes Autorenfeld "Manager" und da trage ich als Defaultwert die "Admin"-Gruppe ein, der ich angehöre.
    Damit bin ich jetzt immer in jedem Dokument eingetragen und sehe alles :)


    Variante B:
    --------------
    Ich erstelle 2 Namensfelder, mit jeweiliger Dropdown-Auswahlmöglichkeit und verstecke im Dokument-Header ein Autoren und ein Leserfeld.


    Namensfelder:
    Bearbeiter: =Namensfeld (Dropdown zur Auswahl)
    Leser: =Namensfeld (Dropdown zur Auswahl)


    im Dokumenten-Header erstelle ich 2 versteckte Felder:
    AllAuthors: =Autoren
    AllReaders: =Leser


    Bevor das Dokument gespeichert wird, kopiere ich die gewählten User vom Bearbeiter nach AllAuthors und die Bearbeiter/Leser nach AllReaders.
    Zusätzlich kopiere ich über z.B. LS vorm Speichern des Dokuments immer die Admin-Gruppe dazu.
    Auch hier bin ich jetzt in jedem Dokument eingetragen und sehe alles :)



    Meine Frage:
    Nachdem die Variante A mit dem zweiten, versteckten Autorenfeld viel einfacher ist, hätte ich gerne gewusst, ob diese Idee auch so passt bzw. was bewirken eigentlich "mehrere Autorenfelder"?


    Danke im voraus für eure Antworten.

  • Ich weiß nicht, ob du die Feldinhalte wirklich in die Leser- und Autorenfelder kopieren musst. Vielleicht reicht auch ein simples "Admingruppe" + <BerabeiterFeldname>, bzw. <LeserFeldname> aus...

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hi,


    ich finde Variante 2 auch besser, vielleicht noch etwas modifiziert zu


    Bearbeiter: = Namensfeld (Dropdown zur Auswahl)
    Leser: = Namensfeld (Dropdown zur Auswahl)


    und als berechnetet Felder


    SuperAdmin := Admin oder evtl. eine Rolle [Admin]
    AllAuthors(Autorenfeld) := @Trim(SuperAdmin:@if(@iserror(Bearbeiter);"";Bearbeiter))
    AllReaders(Leserfeld) := @Trim(@if(@iserror(Leser);"";Leser))


    Wenn Du in der Dropdown-Liste nur sinnvolle Werte angibst, kannst Du Dir das Errorhandling ggf. sparen, aber mit dem Errorhandling machst Du die Sache mit relativ wenig Aufwand robuster - was gerade bei so sensiblen Feldern wie Leser und Autoren durchaus sinnvoll ist. Nichts ist blöder als ein Autorenfeld, wo statt eines Namens plötzlich ein "Error" drinsteht. Das gibt die schönsten undefinierten Zustände :)

    Für jedes Problem gibt es eine einfache Lösung, die es noch schlimmer macht.

  • Dann erstellst du dir halt einen User namens "Error". Da 90% aller Fehler ohnehin vor dem Bildschirm sitzen, macht das schon Sinn... :lol:

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Sowohl Autoren- als auch Leserfelder wirken additiv, sprich:
    Alle Bearbeiter mit Autorenzugriff können ein Dokument bearbeiten, wenn sie in mindestens einem Autorenfeld stehen.
    Wenn es kein Autorfeld gibt, so können nur noch Editoren, Entwickler und Manager das Dokument bearbeiten, denn die Editor-Eigenschaft in der ACL setzt alle Restriktionen aus Autoren-Einträge außer Kraft. Gleiches gilt für Autoren, die in lokalen Repliken arbeiten, in denen keine konsistente ACL eingestellt ist.


    Bei Leserfeldern ist es genauso, allerdings gilt folgende Besonderheit: Jeder kann ein Dokument lesen, wenn ALLE Leserfelder leer sind. Wenn in mindestens einem Leserfeld ein Eintrag steht, können nur noch die Personen das Dokument lesen, die in mindestens einem Leserfeld genannt sind. Wenn ein Autor nicht in einem Leserfeld genannt ist, kann er also sein eigenes Dokument nicht mehr lesen. Daher Vorsicht !!


    Auf jeden Fall müssen berechnete Felder für die Immer-Leser her, denn wenn ein Autor vergessen sollte, sich selbst in das Leserfeld einzutragen, dann hat er selbst das Dokument beim Abspeichern zum letzten Mal gesehen.


    Wenn nicht jedes Dokument geschützt werden muß, dann muß ein berechnetes Leserfeld übrigens leer sein, wenn keine explizite Leserliste existiert.


    Eine Rolle wie [ImmerLeser] bietet sich zudem an.


    Das versteckte Feld ALLESLESER sollte also eine Formel tragen wie:


    @If(@Trim(Leser:$READERS)="";"";@Trim(@Unique(Autoren : "[ImmerLeser]" : "LocalDomainServers")))


    Es mag komisch anmuten, daß ich die Gruppe "LocalDomainServers" namentlich eintrage, aber ich spreche aus Erfahrung. Beim Auswählen des Admin-Servers wird dieser namentlich als Manager eingetragen, übernimmt aber keine Rollen aus der ACL. Wenn der Server die Dokumente aber nicht sehen kann, dann kann er auch nicht die Leser- und Autorenfelder mit dem AdminP-Task ändern. Und repliziert werden die Dokumente natürlich auch nicht.


    Und das ist der zweite zwingende Vorschlag, wenn man mit Autoren- und Leserfeldern arbeitet: In den erweiterten Eigenschaften muß die Option angekreuzt werden, daß der AdminP-Task auch die Autoren- und Lesernamenfelder ändert.


    Und was macht man als Entwickler/Administrator/Anwendungsbetreuer, wenn die Formel versehentlich falsch war und nach einigen Wochen verschiedene Menschen glaubhaft berichten, daß sie Dokumente eingestellt haben, die niemand mehr sieht ?


    Wenn man die Datenbank, die die Dokumente enthält, als Datei auf File-Ebene kopiert und die konsistente ACL abschaltet, sieht man alle Dokumente bei lokalem Zugriff wieder. Über die kann man dann einen Agenten laufen lassen, der die Fehler behebt.


    Beim Schreiben zu einem anderen Artikel fiel mir noch etwas ein, das gerade den letzten Absatz berührt. Es handelt sich um das $READERS-Feld.


    Dieses Feld entsteht, wenn jemand aus den Eigenschaften des Dokuments den Zugriff darauf einschränkt. Das fängst du mit den Mitteln der Maske nie ganz auf, weil es von einer Ansicht aus ganz ohne Maske möglich ist. Aber du kannst es auffangen, wenn es innerhalb der Maske gemacht wird.

  • Zwei grundsätzliche Fragen hätte ich noch:


    Frage 1:
    ======
    Um 100% vermeiden zu können, das Dokumente aufgrund fehlender Zugriffsrechte im ewigen Nirvana (unsichtbar) verschwinden, gibt's ja prinzipiell 2 Varianten, damit ich als Admin immer im (versteckten) Autorenfeld aufscheine.


    Variante 1
    -------------
    - mittels V o r g a b e w e r t für verstecktes Autorenfeld bei Dokumentenerstellung


    verstecktes Autorenfeld
    Typ=Bearbeitbar
    "Vorgabewert" = Admin oder @Name([CN];@DBManager)


    Diese Variante scheint mir unsicher zu ein, und zwar:
    Annahme:
    Meine Administrator-Gruppe heisst irgendwann aus irgendeinem Grund nicht mehr "Admin" sondern "Superadmin" (oder weil ich die DB eben auf einem anderen Server installiere). Damit hat "Superadmin" keinen Zugriff mehr auf die Dokumente, da ja Admin im Autorenfeld steht.


    Variante 2
    -------------
    - mittels b e r e c h n e t e m versteckten Autorenfeld bei Dokument-Anzeige
    verstecktes Autorenfeld
    Typ=Berechnet zur Anzeige
    "Wert" = Admin" oder @Name([CN];@DBManager)


    Diese Variante hat den Vorteil, dass sie die Administratoren der Datenbank zur Laufzeit - also immer aktuell - berechnet. Da es immer einen Manager/DB geben muss, hat DER/DIE Admingruppe immer Zugriff auf alle Dokumente.
    Hätte auch den Vorteil, dass man die DB leicht auf andere Server übertragen kann, und ich muss mich nicht darum kümmern, wie die Administrator-Gruppe des jeweiligen Servers heisst.


    Stimmt meine Theorie?


    Frage 2:
    ======


    Irgendein Schlaumi könnte ja die glorreiche Idee haben, die Server-Datenbank lokal auf den Rechner zu replizieren um damit Zugriff auf ALLE Dokumente zu haben.
    Verhindert das jetzt die "Konsistente ACL über alle Repliken erzingen"?
    Ich weiss, man kann das irgendwie knacken, aber für OttoNormalVerbraucher reichts.


    Danke für Eure Antworten

    • Offizieller Beitrag

    zu Frage 1:
    benutze für die Felder eine Rolle.


    mittels b e r e c h n e t e m versteckten Leserfeld
    Typ=Berechnet
    "Wert" = "[LesenAlles]"


    Die Rolle "LesenAlles" schreibst Du nur in die ACL, wenn Du dies brauchst.


    zu Frage 2:

    Zitat

    Verhindert das jetzt die "Konsistente ACL über alle Repliken erzingen"?

    Ja.


    /edit
    ... oder Du entfernst den Haken "Dokumente replizieren oder kopieren" in der ACL (ABER nicht für Server)


    Zitat

    Ich weiss, man kann das irgendwie knacken, aber für OttoNormalVerbraucher reichts.

    Sehe ich auch so.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

    • Offizieller Beitrag

    oder Du schaust hier.


    Lese dazu auch mal dies besonders Punkt 2.3.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Du denkst zu masken- und zu wenig dokumentorientiert. Erteile dem Manager mindestens EDITOR-Zugriff, und du brauchst dir um Autorenfelder keine Gedanken (für die Administratoren) zu machen.


    Leserfelder sind das Problem. Wer ausgesperrt ist, kann noch so viele "theoretisch wirksame" Formeln in einer hochartifiziell aufgepeppten Maske einbauen - er wird das Dokument mit dieser Maske nie durchrechnen, weil er es nicht sieht.


    Und nicht sehen heißt auch: er kann es nicht replizieren. Dieses Dokument ist nicht in seiner lokalen Replik vorhanden. Deshalb habe ich den Notgriff mit der Kopie auf File-Ebene erwähnt.


    Die konsistente ACL hindert den "Normalbenutzer" daran, Autorenrestriktionen lokal zu überwinden und ermöglicht auch in lokalen Replliken Rollensteuerungen und die Wirksamkeit von kontrollierten Abschnitten.


    Aber auch ein "gehacktes" Dokument kann er auf den Server nur zurückreplizieren, wenn er dort in dem Dokument bereits Autorrechte hatte.


    Vor der inhaltlichen Änderung durch "Hacken" eines Dokuments schützt eine Signatur von Feldern oder kontrollierten Abschnitten (dort wird die Signatur auf alle Felder in dem entsprechenden Abschnitt erweitert).