Home Forum Nuclos Bedienung Administration und Installation [Gelöst]Berechtigung per User/Gruppe auf Datensatz

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 16)
  • Autor
    Beiträge
  • #8098
    Franz Holzer
    Teilnehmer

    Hallo 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
    Franz

    #8109
    Frank Pavlic
    Teilnehmer

    Hallo 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ß
    Frank

    #8110
    Franz Holzer
    Teilnehmer

    Danke 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

    #8111
    Franz Holzer
    Teilnehmer

    Habs 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: 193

    Statement 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.)

    http://pastebin.com/ENx5769B

    #8112
    Frank Pavlic
    Teilnehmer

    Du 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ß
    Frank

    #8113
    Franz Holzer
    Teilnehmer

    danke !

    funktioniert.
    Gibts dazu schon ein Ticket im Jira ?

    #8119
    Frank Pavlic
    Teilnehmer

    nein, dass überlasse ich Dir 😉

    Gruß
    Frank

    #8122
    Ramin Goettlich
    Teilnehmer

    Wir halten das nicht für einen Bug. Die Anführungszeichen zwingen Postgres zur Case-Sensitivität, d.h. „INTID“intid

    #8134
    Frank Pavlic
    Teilnehmer

    Hallo 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ß
    Frank

    #8135
    Franz Holzer
    Teilnehmer

    davon 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 😉

    #8340
    Ramin Goettlich
    Teilnehmer

    Gibt es denn ein Ticket dazu?

    #8357
    Franz Holzer
    Teilnehmer

    support.nuclos.de/browse/NUCLOS-3914

    #8427
    Franz Holzer
    Teilnehmer

    nochmal 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 ?

    #8428
    Papa Schlumpf
    Teilnehmer

    Das geht, indem man die Attribute Attributgruppen zuweist. Dann kann man im Statusmodell die Berechtigungen für jede Gruppe separat ändern.

    #8429
    Franz Holzer
    Teilnehmer

    sry 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.

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 16)