Ganymed Geschrieben 6. Oktober 2005 Teilen Geschrieben 6. Oktober 2005 Hallo zusammen, mir ist grad kein besserer Titel eingefallen, da ich nicht wirklich einen Namen für das Problem habe. Folgende Situation: Anhand von Benutzern, soll herausgefunden werden, wer welchen Datensatz in meiner Datenbank sehen darf und welchen nicht. Dies wurde bei uns so umgesetzt, dass eine Zahlenreihenfolge gesetzt wird, die den Datensatz eindeutig in der Sicht kennzeichnet. Und zwar gibt es verschiendene Benutzergruppen, die aus dem System 2^0, 2^1, 2^2, 2^3, usw. zusammengesetzt sind. Beispiel: Der Benutzer Müller gehört der Benutzergruppe 2^2 (=4) an. Der Benutzer Meier gehört der Benutzergruppe 2^3 (= 8) an. Der Benutzer Schmidt gehört der Benutzergruppe 2^0 (=1) an. Der Datensatz XYZ darf von den Benutzergruppen gesehen werden, die der 2^2 und der 2^3 angehören. Sprich Herr Schmidt dürfte diesen nicht sehen. Um das zu Bewerkstelligen, wurden die Datensätze mit der Summe der Benutzerzugehörigkeit versehen. Sprich: Der Datensatz XYZ hat als Mandantennummer die 12 (da 4+8). Dadurch ist jeder Datensatz eindeutig gekennzeichnet. Nur jetzt habe ich folgendes Problem: Es muss auch wieder Eindeutig zurückgerechnet werden können. Durch das (nennt man das so) Bit-System bei den Benutzern gibt es nur eingeschränkte Zahlen, die zur Verfügung stehen. Ich müsste jetzt also wissen, dass die Mandantenummer 12 aus genau den beiden Benutzergruppen 2^2 und 2^3 entstanden ist. Gibt es für sowas einen Algorithmus? Hat das einen bestimmten Namen (wie. z.B. Bubblesort) wonach man mal googlen könnte? Die Datenbank ist ein Oracle-System. Gibts vielleicht dort auch schon eine eingebaute Rückrechnungsfunktion? Wer klasse, wenn jemand ne Idee hätte Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 6. Oktober 2005 Teilen Geschrieben 6. Oktober 2005 ich würde spontan hochrechnen und mit der gesamtsumme vergleichen. also 2^1 < mandantennummer 2^2 < 2^3 < 2^4 > then mandantennummer - 2^3 und so weiter, bis mandantennummer == 0 man kann natürlich auch nur die Hochzahlen duchlaufen, die erlaubt sind. also wenn zum beispiel die 2 nicht erlaubt ist, dann nicht ^1 rechnen sondern mit ^2 beginnen zu beachten ist aber, dass bei mehr als 2 zusammengesetzen zahlen, es mehrere möglichkeiten geben kann ... also muß man die Menge aller Lösungen finden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 6. Oktober 2005 Teilen Geschrieben 6. Oktober 2005 ich glaube die bezeichnung für dieses Vorgehen ist "Rekursives rechnen" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HuDeanY Geschrieben 6. Oktober 2005 Teilen Geschrieben 6. Oktober 2005 Kann es sein dass dieses Problem nach einer BINÄR Darstellung schreit? dezimal = binär 0 = 0000 0000 1 = 0000 0001 2 = 0000 0010 3 = 0000 0011 4 = 0000 0100 5 = 0000 0101 ... dementsprechend wenn du die Berechtigung 12 = 0000 1100 hast sind die beiden Benutzergruppen an deren position in der binär Darstellung die 1 steht --> 8 und 4 berechtigt DateiberechtigungsZahl : Berechtigte Gruppen 17 = 0001 0001 : 16 und 1 26 = 0001 1010 : 16 und 8 und 2 Kommt das deinem Problem nahe? Diese umrechnung ist übrigens dann eindeutig. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 6. Oktober 2005 Autor Teilen Geschrieben 6. Oktober 2005 Kann es sein dass dieses Problem nach einer BINÄR Darstellung schreit? dezimal = binär 0 = 0000 0000 1 = 0000 0001 2 = 0000 0010 3 = 0000 0011 4 = 0000 0100 5 = 0000 0101 ... dementsprechend wenn du die Berechtigung 12 = 0000 1100 hast sind die beiden Benutzergruppen an deren position in der binär Darstellung die 1 steht --> 8 und 4 berechtigt DateiberechtigungsZahl : Berechtigte Gruppen 17 = 0001 0001 : 16 und 1 26 = 0001 1010 : 16 und 8 und 2 Kommt das deinem Problem nahe? Diese umrechnung ist übrigens dann eindeutig. Hmmm... das klingt gar nicht mal dumm... Nur ich bekomme aus einer Dezimalzahl in Oracle kein Binär mehr... Oder weiß das hier jemand? Gibts da vielleicht auch nen Algorithmus zu? (eigentlich wollte ich von der Binärnummer runter - aber das klingt bisher am besten) Oder noch andere Alternativen vielleicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 6. Oktober 2005 Teilen Geschrieben 6. Oktober 2005 Üblicherweise macht man das mit Schiebe- und binären Verknüpfungsoperatoren. Wenn du die nicht zur Verfügung hast, kannst du auch mit wiederholter Division durch zwei und Prüfen des Divisionsrests arbeiten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 7. Oktober 2005 Autor Teilen Geschrieben 7. Oktober 2005 Hmmm... klingt gut Ich werd das mal auf Papier bringen und es versuchen in Code umzuwandeln Supi, erstmal bis hier! Bei Fragen nerv ich halt wieder Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.