Home › Forum › Nuclos Bedienung › Administration und Installation › [Gelöst]Berechtigung per User/Gruppe auf Datensatz
- Dieses Thema hat 15 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahre, 9 Monaten von
Papa Schlumpf.
-
AutorBeiträge
-
14 Januar 2015 um 19:09 Uhr #8098
Franz Holzer
TeilnehmerHallo Forum,
Leider komme ich mit Wiki und Forum nicht weiter.
Kurz die beschreibung was ich erreichen möchte.Es gibt ein BO mit namen „AB“
Dort erstellte Datensätze sollen nur von dem Benutzer(X), welcher sie erstellt hat, eingesehen/bearbeitet werden können.
Sprich er kann keine „fremden“ Datensätze von Benutzer Y oder Z sehen.Zusätzlich soll es aber möglich sein das die Gruppe „Verwaltung“ alle Datensätze sieht.
Ich habe mich mit Datensatzfreigaben und Objektgruppen versucht – jedoch sind die Wiki Einträge dazu so alt das ich es nicht schaffe. Es fehlt das kleine Stück damit ich es verstehe.
Videos gibts es dazu noch keine.kann wer mit mit einem Beispiel weiterhelfen.
Gerne erstelle ich danach einen Wiki Artikel diesbezüglich bzw. passe die alten an.lg
Franz15 Januar 2015 um 17:19 Uhr #8109Frank Pavlic
TeilnehmerHallo Franz,
bei Datensatzfreigaben gehst Du wie folgt vor:
1.
Datensatzfreigabe erstellen, Konfiguration -> Datenquellen->Datensatzfreigabe
z.B. zeige nur die AB-Daten an, die der eingeloggte Benutzer erstellt hat
—>
SELECT AB.“intid“ „intid“
FROM AB
WHERE AB.“strcreated“ = ‚$username‘
Benutzergruppe aufrufen und die Gruppe des Benutzers X aufrufen. Dort in Reiter „Datensatzfreigaben“ dann die unter 1. erstellte Freigabe auswählen.That’s it.
Gruß
Frank15 Januar 2015 um 18:40 Uhr #8110Franz Holzer
TeilnehmerDanke das hilft schon um einiges weiter.
Nun versteh ich den Editor auch um einiges mehr.leider bekomm ich noch einen Error.
Im Editor hab ich mein BO „T1.AB“ und die „T2.nuclos_user“
In der ersten Spalte die Tabelle „T1.AB“, Spalte „“ gewählt.
In der zweiten Spalte „T2.nuclus.user“, Spalte „createdBy“ und die Bedingung „=’$username'“Mein Syntax (mit Editor) sieht nun so aus:
SELECT
T1."intid" "INTID"
FROM
k4ed_ab T1,
t_md_user T2
WHERE
(
T2."strcreated" = '$username'
)Bekomme jedoch den Error:
ehlermeldung: Fehler beim Laden der Daten für das Businessobjekt agj3WZWg34V1CXRKrmvw.
Stack Trace:
org.nuclos.common2.exception.CommonFatalException: Fehler beim Laden der Daten für das Businessobjekt agj3WZWg34V1CXRKrmvw.
at org.nuclos.client.masterdata.MasterDataDelegate.getMasterDataProxyList(MasterDataDelegate.java:322)
at org.nuclos.client.ui.collect.search.MasterDataSearchStrategy.getSearchResult(MasterDataSearchStrategy.java:115)
at org.nuclos.client.ui.collect.search.MasterDataObservableSearchWorker.getResult(MasterDataObservableSearchWorker.java:41)
at org.nuclos.client.ui.collect.search.MasterDataObservableSearchWorker.getResult(MasterDataObservableSearchWorker.java:1)
at org.nuclos.client.ui.collect.result.SearchResultStrategy$1$1.work(SearchResultStrategy.java:175)
at org.nuclos.client.ui.CommonMultiThreader$WorkerThread.run(CommonMultiThreader.java:136)
Caused by: org.nuclos.server.dblayer.DbException: executeQuery(SELECT COUNT (t.INTID) FROM K4ED_AB AS t RIGHT OUTER JOIN (SELECT
T1."intid" "INTID"
FROM
k4ed_ab T1,
t_md_user T2
WHERE
(
T2."strcreated" = 'mkriegl'
)
) a_nuclosRgt809 ON (t.INTID = a_nuclosRgt809.INTID) WHERE (t.INTID IN (SELECT ds."intid" FROM (SELECT
T1."intid" "INTID"
FROM
k4ed_ab T1,
t_md_user T2
WHERE
(
T2."strcreated" = 'mkriegl'
)
) ds)) LIMIT 2) failed
Noch eine Anmerkung:
Ich weiß und sehe das dein Syntax anderst aussieht.
Habe aber bewusst versucht den Editor zu verwenden weil ich denke das auch ein anderer Neuling so vorgehen würde.Jedoch bekomm ich den Syntax von dir ohne der Nuclus_User Table im Editor (noch) nicht hin.
Bin aber grad am experementieren.
lg
15 Januar 2015 um 18:47 Uhr #8111Franz Holzer
TeilnehmerHabs nun hinbekommen mit dem Editor,
Aber iwo hängt auch darin ein bug.
Konnte nicht von anfang an die selbe Spalte mit T1 befüllen.
Darum dachte ich das ist eine limitierung.Error bekomme ich aber nachwie vor:
Caused by: java.sql.SQLException: ERROR: column a_nuclosrgt809.intid does not exist
Position: 193Statement schaut nun so aus:
SELECT
T1."intid" "INTID"
FROM
k4ed_ab T1
WHERE
(
T1."strcreated" = '$username'
)in der Vorschau funktioniert alles und ich bekomme eine initd zurück.
Kann das noch mit anderen Berechtigungen zusammenhängen ?
Wenn ich dem User „su“ rechte gebe – ziehen dan die Datensatzfreigaben noch ?Edit:
wenn ich danach in „AB“ mit dem User einen neuen Eintrage mache bekomme ich auch den Fehler:
aused by: java.sql.SQLException: ERROR: column a_nuclosrgt809.intid does not exist
Position: 974[code]verstehe noch nicht was falsch läuft.
Hier einmal das ganze log auf pastebin.
(nicht wundern, das BO heisst bei mir „scouting“
AB wurde verwendet um es hier einfacher zu halten.)16 Januar 2015 um 14:19 Uhr #8112Frank Pavlic
TeilnehmerDu verwendest postgresql >= 9.3, dann versuche diesen Workaround:
SELECT T1."intid" INTID <-- ohne " um INTID
FROM k4ed_ab T1
WHERE T1."strcreated" = '$username'Postgresql moniert, dass a_nuclosRgt809.INTID nicht existiert. Der Subquery nutzt „INTID“, im ON-Teil wird aber a_nuclosRgt809.INTID verwendet.
Meiner Meinung nach ist das ein Bug in nuclos.
Gruß
Frank16 Januar 2015 um 18:54 Uhr #8113Franz Holzer
Teilnehmerdanke !
funktioniert.
Gibts dazu schon ein Ticket im Jira ?17 Januar 2015 um 19:39 Uhr #8119Frank Pavlic
Teilnehmernein, dass überlasse ich Dir 😉
Gruß
Frank19 Januar 2015 um 18:22 Uhr #8122Ramin Goettlich
TeilnehmerWir halten das nicht für einen Bug. Die Anführungszeichen zwingen Postgres zur Case-Sensitivität, d.h. „INTID“intid
20 Januar 2015 um 15:03 Uhr #8134Frank Pavlic
TeilnehmerHallo nuclosian,
das verstehe ich .
Allerdings sehe ich den Fehler bei den mit [b] markierten Stellen:SELECT COUNT (t.INTID) FROM K4ED_AB AS t RIGHT OUTER JOIN (SELECT
T1."intid" "INTID"
FROM
k4ed_ab T1,
t_md_user T2
WHERE
(
T2."strcreated" = 'mkriegl'
)
) a_nuclosRgt809 ON (t.INTID = a_nuclosRgt809.INTID) ... usw...
.Wenn der Administrator eine Datensatzfreigabe wie folgt entwickelt:
SELECT
T1."intid" "INTID"
FROM
k4ed_ab T1,
t_md_user T2
WHERE
(
T2."strcreated" = 'mkriegl'
)
Diese SQL ist laut nuclos und postgres zunächst korrekt.
Dann kann es aber nicht sein, dass es Fehler gibt, wenn die Datensatzfreigabe zur Anwendung kommt. Der Fehler liegt dann bei
a_nuclosRgt809.INTID, welches ja bei dem Konstrukt weiter oben a_nuclosRgt809.“INTID“ heissen müsste.Der Administrator kann ja nicht wissen, was nuclos aus seiner einfachen SQL-Anweisung für ein Konstrukt erstellt. Woher soll er dann wissen, dass „INTID“ falsch ist , dagegen INTID aber richtig!
Das ist definitiv ein Bug.
Gruß
Frank20 Januar 2015 um 15:07 Uhr #8135Franz Holzer
Teilnehmerdavon abgesehen habe ich den Editor verwendet und nicht selbst den Syntax geschrieben (da ich diese Funktionalität testen wollte)
Also entweder Bug oder by design fehlerhaft 😉
aber ich bin das gewohnt – bin im Icinga Open Source Developer Team und da werden meine Jira Tickets auch zuerst mit „nicht reproduzierbar“ abgelehnt 😉
4 April 2015 um 16:20 Uhr #8340Ramin Goettlich
TeilnehmerGibt es denn ein Ticket dazu?
6 April 2015 um 22:50 Uhr #8357Franz Holzer
Teilnehmersupport.nuclos.de/browse/NUCLOS-3914
27 Mai 2015 um 18:54 Uhr #8427Franz Holzer
Teilnehmernochmal eine Frage zu dem Thema.
Das mit den Datensatzfreigaben funktioniert eigentlich wie ich es will.
Jedoch bekam ich nun eine neu Anforderung bzw. eine Erweiterungs Wunsch.Nehmen wir 3 Benutzer an:
A (darf nur teile eine Datensatzes lesen)
B (darf nur seine eigenen Datensätze lesen – komplett)
C (darf alle Datensätze lesen – komplett)B und C hab ich mit Hilfe der Datensatzfreigabe wie hier im Thread beschrieben – gelöst.
Aber wie solle ich Benutzer (bzw. Benutzer Gruppe) A abbilden ?
Ist das überhaupt möglich ?27 Mai 2015 um 22:14 Uhr #8428Papa Schlumpf
TeilnehmerDas geht, indem man die Attribute Attributgruppen zuweist. Dann kann man im Statusmodell die Berechtigungen für jede Gruppe separat ändern.
27 Mai 2015 um 23:08 Uhr #8429Franz Holzer
Teilnehmersry aber nein, das kann ich mit „normalen“ Attributgruppen nicht realisieren.
Wie stellst du dir das vor ?
Dann müsste man die Attributgruppen automatisch von angemeldeten User abhängig machen können.eventuell ist es ein beschreibungs fehler von mir.
Benutzer A (bzw Gruppe A ) sieht seine eigenen Datensätze, und alle anderen aber nur teile davon.
Benutzer B (bzw Gruppe B ) – mit DF, sieht seine eigenen komplett und die anderen gar nicht.
Benutzer C (bzw Gruppe C ) – mit DF, sieht alle Datensatzfreigaben.
Die Gruppe B würde wegfallen wenn ich A realisieren kann.
-
AutorBeiträge