Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Designfrage: Daten ohne Userrechte anzeigen?
HannesB
myCSharp.de - Member

Avatar #avatar-2666.gif


Dabei seit:
Beiträge: 185
Herkunft: Österreich

Themenstarter:

Designfrage: Daten ohne Userrechte anzeigen?

beantworten | zitieren | melden

Hallo,

ich habe eine Designfrage, zu welcher mich eure Meinung intressieren würde.

Grundsätzlich geht es darum, ob man einem User Daten anzeigen sollte, auf welche er kein Leserecht hat.
Meine Meinung dazu ist, dass man das nicht tun sollte, jedoch interessiert mich eure Meinung.

Programm : Mehrere User arbeiten (gleichzeitig) mit einer Projektverwaltung (Client - Server Anwendung)
Domain Modell: Ein Projekt besteht aus n Paketen

[Projekt] 1...n [Paket]

Funktion : Zeige mir alle Pakete eines Projektes

Beispiel: Es gibt das Projekt "A", welches aus 5 Paketen besteht.
Der User "User_1" hat ein Leserecht auf 3 dieser 5 Pakete, z.B. auf Paket 1-3.

Eine Clientanwendung wird gestartet, welche die Pakete eines Projektes abruft und in einem Treeview anzeigt.
"User_1" meldet sich an der Clientanwendung an und führt die Funktion: Zeige mir alle Pakete des Projektes ("A") an.

Wie soll der Treeview nun aussehen?
Sollen 5 Pakete angezeigt werden + wenn der User auf z.B. Paket 1-3 klickt, sieht er deren Detaildaten,
wenn er auf Paket 4+5 klickt, bekommt er eine Meldung, dass er darauf keine Rechte hat.
ODER
Sollen nur 3 Pakte angezeigt werden - jene, auf welche der User ein Leserecht hat

Grundsätzlich gefällt mir das 2. Szenario besser -> etwas garnicht anzeigen, auf das man keine Rechte hat.

Denn nach Szenario 1 wäre es ja theoretisch möglich, dass "User_1" eine Liste mit 10 Projekten sieht, tatsächlich aber mit KEINEM davon etwas tun kann.
Dass merkt er jedoch erst, wenn er diese auswählt + eine Fehlermldung bekommt -> er muss also "durchprobieren".
Auch ist es imho. eine Grundsatzfrage, ob man einem User etwas anzeigen soll, auf das er keine Rechte hat.

...also gehen wir nach Szenario 2 vor:
Hier könnte es nun aber sein, dass "User_1" denkt: Hey, hier fehlen ja noch Paket 4 und 5 (weil er sie eben nicht sieht)
-> er glaubt: diese muss ich noch neu anlegen. (Annahme: er hat das Recht, Pakete anzulegen)
Das ist aber nicht gewünscht, da diese ja eigentlich bereits existieren.

Wäre es eurer Meinung nach eine sinvolle Kompromisslösung, z.B. die Pakete 4+5, auf die der User kein Recht hat "disabled" anzuzeigen?
Dadurch verlagere ich diese Logik jedoch in den Client (!) - die Serveranwendung müsste alle 5 Packete zurückgeben mit der Anmerkung, dass der User eigentlich nur auf Paket 1-3 Leserecht hat.

fg
Hannes
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo HannesB,

an die Kompromisslösung hatte ich schon gedacht, als ich noch weiter oben am lesen war. So solltest du es machen. Dass du dadurch was ins GUI verlagerst, dass da nicht hingehört, sehe ich nicht. Für den Unser ist es eindeutig der beste Weg.

Apropos Fehlermeldung: Ich halte hier Fehlermeldungen nicht für sinnvoll, also zumindest nicht als poppendes, quäkendes "Ätsch, das darfst du nicht"-Fenster. Das sollte stattdessen ein netter, freundlicher Hinweis sein, der dort angezeigt wird, wo sonst die Informationen über das Paket erscheinen würden, wenn der User es bearbeiten dürfte. Das ich eine Berechtigung nicht habe, ist ja kein Fehler. Dass ich auf ein Paket klicke, für dass ich keine Berechtigung habe, in meinen Augen auch nicht. Es reicht ein Hinweis, warum für so ein Paket keine weiteren Informationen angezeigt werden.

herbivore
private Nachricht | Beiträge des Benutzers
N1ls
myCSharp.de - Member



Dabei seit:
Beiträge: 46

beantworten | zitieren | melden

Hallo Hannes,
Zitat von HannesB
Wäre es eurer Meinung nach eine sinvolle Kompromisslösung, z.B. die Pakete 4+5, auf die der User kein Recht hat "disabled" anzuzeigen?
Dadurch verlagere ich diese Logik jedoch in den Client (!) - die Serveranwendung müsste alle 5 Packete zurückgeben mit der Anmerkung, dass der User eigentlich nur auf Paket 1-3 Leserecht hat.

Die Logik, was die Absicherungen der Zugangsberechtigungen angeht bleibt (bei korrekter Implementierung) weiterhin beim Server.

Etwas konkretisiert sieht es doch ungefaehr so aus, dass die 5 Pakete mehr oder weniger aus 5 Paaren von Paketnamen und Paketdaten uebertragen werden. Also:

Paketname 1, Paketdaten 1
Paketname 2, Paketdaten 2
Paketname 3, Paketdaten 3
Paketname 4, Paketdaten 4
Paketname 5, Paketdaten 5

Jetzt die Uebertragung fuer den Fall, dass nur Leseberechtigungen fuer Pakete 1-3 vorhanden sind:

Paketname 1, Paketdaten 1
Paketname 2, Paketdaten 2
Paketname 3, Paketdaten 3
Paketname 4, NULL
Paketname 5, NULL

Daten, auf die der Benutzer keine Leserechte hat, werden vom Server nicht geliefert. Wenn der Client "bemerkt", dass fuer Paket 4 und 5 keine Daten uebertragen wurden, kann er daraus schliessen, dass die Berechtigungen des Benutzers nicht ausreichen. Das kann dann durch eine entsprechende Darstellung kenntlich gemacht werden (z.B. auch disabled) oder sogar ausgeblendet werden. Kann natuerlich auch noch durch ein zusaetzliches Flag realisiert werden, aber sicherheitstechnisch liegt die volle Kompetenz "wer darf was lesen?" beim Server.

Gruesse,

N1ls
private Nachricht | Beiträge des Benutzers
HannesB
myCSharp.de - Member

Avatar #avatar-2666.gif


Dabei seit:
Beiträge: 185
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

hallo + danke für eure antworten!

@herbivore: stimmt, "Fehlermeldung" ist hier wohl der falsche Ausdruck - es sollte natürlich nur ein Hinweis kommen. Ansonsten finde ich gut, dass du auch auf den "Kompromissvorschlag" zurückgreifen würdest, dann ist der wohl doch nicht so schlecht.

@N1ls: ja, das erscheint mir sinvoll, hier ev. noch eine Trennun zwischen "Daten für die Anzeige dass es etwas gibt" und den tatsächlichen Daten zu unterscheiden - so ist dann auch gewährleistet, dass der Server keine Daten verschickt, auf die Clients nicht zugreifen dürfen.

thx
hannes
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo HannesB,

für das von dir beschriebene Szenario würde ich auch den "Kompromissvorschlag" wählen. Das kann man aber nicht für alle Szenarien pauschalisieren und so bleibt dir vor jeder Umsetzung wieder die Frage, sollen die Daten im TreeView angezeigt werden oder nicht. Denn wenn ein Anwender niemals Zugriff auf bestimmte Typen von Daten bekommen würde, dann würde ich sie ihm auch grundsätzlich nie anzeigen. In deinem Szenario könnte das ja beispielsweise eine Abrechnung zu Personalkosten zum jeweligen Projekt sein, die von jemand anderem mit in dem Projekt angehängt werden.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers