Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    SOLVED Abfrage bzw. setzen der Permissions per API

    ChurchTools Schnittstellen
    5
    16
    479
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bwl21 last edited by

      Ich würde gerne die Einstellungen der Zugriffsberechtigungen archivieren, und ggf. automatisiert einstellen.

      ich finde im V2 Api

      • GET /permissions/globalAll Permissions for the Current User
      • GET /permissions/internal/persons/{personId}Lookup Person-Related Group Internal Permissions
      • GET /permissions/internal/groups/{groupId}Lookup Group-Related Group Internal Permissions

      aber nichts um die globalen Berechtigungen einer Person (machen wir eh nicht), einer Gruppentyps einer Gruppe auszulesen, oder gar zu setzen.

      Gibt es da was, zur Not im V1 Api

      jziegeler B 2 Replies Last reply Reply Quote 1
      • B
        bwl21 @davidschilling last edited by bwl21

        @davidschilling sagte in Abfrage bzw. setzen der Permissions per API:

        schau am besten mal in eurem ChurchTools Log nach ob dort ein Fehler sichtbar ist.

        warum bin ich auf die Idee nicht selbst gekommen? Da stand die Lösung: Der will als data echt einen json-String sehen, der dann nochmal beim Senden nochmal mit http_build_query verpackt werden muss.

        vielen Dank für den Hinweis.

        1 Reply Last reply Reply Quote 0
        • jziegeler
          jziegeler ChurchToolsMitarbeiter @bwl21 last edited by

          @bwl21 in diesen Endpunkten wird nicht danach unterschieden woher der User die Berechtigung bekommt, sondern einfach nur ob er sie hat. Also hier bekommst du eine aggregierte Ansicht. Einzelne Abfragen welche Rechte auf Gruppentyp A gesetzt sind gibt es zurzeit noch nicht. In der alten weiß ich das gerade nicht

          MichaelG 1 Reply Last reply Reply Quote 0
          • B
            BeMiGro @bwl21 last edited by

            Eine Möglichkeit, die Rechte (insbesondere) von Gruppen per API abfragen zu können, fände ich auch hochinteressant.
            Mein Ziel wäre, die Berechtigungen vergleichbarer Gruppen z.B. über ein Python-Skript auszulesen und zu vergleichen um Inkonsistenzen zu finden.

            Bei den Rechten einer Person wäre die Information, woher genau das Recht kommt, sehr interessant um Fehler und unnötige Doppelungen zu finden.

            B 1 Reply Last reply Reply Quote 0
            • B
              bwl21 @BeMiGro last edited by

              @bemigro da haben wir dasselbe Ziel. Ich versuche das mit PHP (ich mag die Sprache nicht wirklich - bin eher bei Ruby, wollte aber den Technologie-Stack nicht aufblähen)

              Ich gehe da eher noch weiter, ich würde gerne Rechtetemplates einführen und diese automatisch auf die passenden Gruppen aufprägen.

              B 1 Reply Last reply Reply Quote 1
              • B
                BeMiGro @bwl21 last edited by

                @bwl21 Gute Idee, das wäre dann die Kür zur Pflicht.
                Ruby habe ich noch nie, PHP schon ewig nicht mehr programmiert; der Grund für Python in meinem Fall ist einfach, daß ich aktuell beruflich damit zu tun habe.

                B 1 Reply Last reply Reply Quote 0
                • B
                  bwl21 @BeMiGro last edited by

                  @bemigro schon klar, ich wollte hier keinen Sprachdiskussion anfangen. Man nimmt halt, was man kann ...

                  Das Abfragen der Rechte kriege ich inzwischen hin. Ich habe als Minimum den Plan, diese Rechte in Git abzulegen, und so Änderungen verfolgen zu können bzw. frühere Zustände manuell wieder herstellen zu können.

                  Es ist ja leider so, dass man mit wenigen Mausklicks die ganze Rechtestruktur verbügeln kann.

                  MichaelG 1 Reply Last reply Reply Quote 1
                  • MichaelG
                    MichaelG @bwl21 last edited by

                    @bwl21 könnte sowas sogar offiziell Teil von CT werden?

                    B 1 Reply Last reply Reply Quote 0
                    • B
                      bwl21 @MichaelG last edited by

                      @michaelg Das liegt ja nicht in meiner Hand. Wenn ich aber einen brauchbaren Stand habe, werde ich das opensource veröffentlichen.

                      Meine Spielwiese steht auf https://github.com/bwl21/CT-API-Tools

                      1 Reply Last reply Reply Quote 2
                      • MichaelG
                        MichaelG @jziegeler last edited by

                        @jziegeler vielleicht könntet ihr was in die Richtung überlegen. Die Rechtsverwaltung ist mächtig und fragil zugleich

                        B 1 Reply Last reply Reply Quote 1
                        • B
                          bwl21 @MichaelG last edited by

                          @michaelg sagte in Abfrage bzw. setzen der Permissions per API:

                          @jziegeler vielleicht könntet ihr was in die Richtung überlegen. Die Rechtsverwaltung ist mächtig und fragil zugleich

                          Ich habe jetzt einen gewissen Stand erreicht. Wenn du möchtest, könnten wir das mal zusammen gegen eure Instanz laufen lassen. Dann hätte ich noch einen Testfall.

                          Der Ansatz ist so, dass ein JSON -File rauskommt, welches man gut in GIT archiveren kann. Dieses File enthält auch Hinweise über gleichartige Rechteeinstellungen. Damit kann man eine gewissse Plausisbliblierung erreichen.

                          Es ist ein 250 Zeilen PHP - Script.Letztlich wäre es mir am, dass CT das übernimmt und irgendwie in den API anbietet.

                          B 1 Reply Last reply Reply Quote 0
                          • B
                            bwl21 @bwl21 last edited by

                            @jzegler Jetzt habe ich einen Stand erreicht und würde gerne mal versuchen, die Berechtigungen zwischen Gruppen zu kopieren.

                            Ich habe in den Developertools verfolgt, was passiert, wenn ich das über das UI machen. Es ist mir aber nicht klar, woher ich die nächste ID für den "GrupememberStatus" bekomme, wenn es noch keinen Eintrag gibt.

                            Ich hätte gedacht, dass churchtauth func saveAuth die berechneet, wenn ein neuer Datensatz angelegt wird. Ich sehe aber dass die Webseite eine neue domain_id liefert.

                            func: saveAuth
                            domain_type: groupMemberstatus
                            domain_id: 810
                            data: [{"auth_id":"501"},{"auth_id":"502","daten_id":-1},{"auth_id":"599"},{"auth_id":"801"},{"auth_id":"899"}]
                            browsertabId: 1418011307
                            

                            Die Frage ist wo hat die Applikation die nächste freie domain_id her?

                            davidschilling 1 Reply Last reply Reply Quote 0
                            • davidschilling
                              davidschilling ChurchToolsMitarbeiter @bwl21 last edited by

                              @bwl21 domain_id ist in diesem Fall die Id des groupMemberstatus für den die Berechtigung bergeben wird.

                              B 1 Reply Last reply Reply Quote 0
                              • B
                                bwl21 @davidschilling last edited by bwl21

                                @davidschilling sagte in Abfrage bzw. setzen der Permissions per API:

                                domain_id ist in diesem Fall die Id des groupMemberstatus für den die Berechtigung bergeben wird.

                                meine Frage war, wenn groupMemberstatus noch keinen Eintrag für die Gruppe hat.
                                Gerade hab ich es nochmal probiert ... beim anlegen einer neuen Gruppe werden auch alle zugehörigen groupMemerstatus angelegt. Das klärt meine Frage.

                                Sehe ich es richtig, dass es keine Funktion gibt, welche den auth des Eintrags 1193 nach z.B 840 kopiert.

                                "1193": {
                                    "id": "1193",
                                    "group_id": "68",
                                    "grouptype_memberstatus_id": "9",
                                    "active_yn": "1",
                                    "growpath_id": null,
                                    "force_2fa": "0",
                                    "read_chat": "1",
                                    "write_chat": "1",
                                    "auth": {
                                        "304": {
                                            "1": "1",
                                            "3": "3",
                                            "4": "4"
                                        },
                                        "502": {
                                            "-1": "-1"
                                        }
                                    }
                                },
                                

                                in saveAuth sieht ja so aus, d.h. es ist flachgeklopft. Das würde man ja noch hinkriegen.

                                domain_id: 1193
                                data: [{"auth_id":"304","daten_id":"1"},{"auth_id":"304","daten_id":"3"},{"auth_id":"304","daten_id":"4"},{"auth_id":"502","daten_id":-1}]
                                

                                Mein Ziel ist es, die mächtige aber auch komplexe Berechtigungseinstellungen durch eine geeignete Strategie besser zu beherrschen.

                                Ich habe einen Report geschrieben und auf unsere Instanz losgelassen. Da sieht man schon, dass manche Ungereimtheiten in den Berechtigungen vorliegen. Momentan hat man ja kaum eine andere Möglichkeit, als rumzuprobieren und sobald es tut, die Einstellung zu belassen (selbst wenn man nicht weiß, warum es tut).

                                Momentan verfolge ich den Ansatz, allgemeine Berechtigungsvorlagen zu erstellen (als Gruppe ohne Mitglieder) und diese Vorlagen dann über das API in die jeweiligen Stellen zu kopieren. Ich bin noch am Forschen und experimentieren, da ich nicht sicher bin, ob der Ansatz zielführend ist.

                                Es wäre mir natürlich lieber, wenn ein solches Vorgehen in CT native unterstützt würde, z.b. über eine definierte Gruppenbeziehung (https://forum.church.tools/topic/7186/bedeutung-der-gruppenbeziehungen-definieren), oder wie auch immer, mit jeder Stelle verbinden, die Berechtigungen definieren kann ( also auch Gruppentypen, Status, Personen (aber das verwenden wir ja nicht). Das ganze muss man ja nicht zur Laufzeit machen. Das könnte auch ein Verwaltungsjob "Berechtigungen korrigieren" machen.

                                B 1 Reply Last reply Reply Quote 1
                                • B
                                  bwl21 @bwl21 last edited by

                                  @davidschilling so nun habe ich mal etwas weiter gemacht und bleibe hängen:

                                  Wenn ich im Browser Recht setze, dann sieht der Request so aus.

                                  func: saveAuth
                                  domain_type: groupMemberstatus
                                  domain_id: 786
                                  data: [{"auth_id":"1"},{"auth_id":"2"},{"auth_id":"3"},{"auth_id":"4"},{"auth_id":"5"},{"auth_id":"6"},{"auth_id":"7"}]
                                  browsertabId: 1989686060
                                  

                                  Wenn ich das mit meinem Script mache, sieht der Request so aus:

                                  {
                                          "func": "saveAuth",
                                          "domain_type": "groupMemberstatus",
                                          "browsertabId": 14908869,
                                          "domain_id": 786,
                                          "data": [
                                              {
                                                  "auth_id": "1"
                                              },
                                              {
                                                  "auth_id": "2"
                                              },
                                              {
                                                  "auth_id": "6"
                                              },
                                              {
                                                  "auth_id": "7"
                                              },
                                              {
                                                  "auth_id": "3"
                                              },
                                              {
                                                  "auth_id": "4"
                                              },
                                              {
                                                  "auth_id": "5"
                                              }
                                          ]
                                      }
                                  

                                  also praktisch gleich. Als Antwort kriege ich dann

                                  {
                                          "status": "error",
                                          "message": "Ups ... da ist ein uns ein technischer Fehler unterlaufen lauter Nullen und Einsen 010111000 ... bitte lade die Seite neu, danke."
                                      }
                                  

                                  und es wird nichts gesetzt.

                                  Wenn ich die 'func' verändere kriege ich die Meldung, dass die Funktion nicht existiert. Der Aufruf kommt also wohl richtig an.

                                  Das funktioniert weder mit noch ohne browsertabid.

                                  Es läuft im gleichen User wie interaktiv im Browser.

                                  Woran kann das noch liegen?

                                  davidschilling 1 Reply Last reply Reply Quote 0
                                  • davidschilling
                                    davidschilling ChurchToolsMitarbeiter @bwl21 last edited by

                                    @bwl21 schau am besten mal in eurem ChurchTools Log nach ob dort ein Fehler sichtbar ist.

                                    B 1 Reply Last reply Reply Quote 0
                                    • B
                                      bwl21 @davidschilling last edited by bwl21

                                      @davidschilling sagte in Abfrage bzw. setzen der Permissions per API:

                                      schau am besten mal in eurem ChurchTools Log nach ob dort ein Fehler sichtbar ist.

                                      warum bin ich auf die Idee nicht selbst gekommen? Da stand die Lösung: Der will als data echt einen json-String sehen, der dann nochmal beim Senden nochmal mit http_build_query verpackt werden muss.

                                      vielen Dank für den Hinweis.

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post