• Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen
    • Suche
    • Registrieren
    • Anmelden

    Gelöst Abfrage bzw. setzen der Permissions per API

    ChurchTools Schnittstellen
    5
    16
    672
    Lade mehr Beiträge
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
    • B
      BeMiGro @bwl21
      zuletzt editiert von

      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 Antwort Letzte Antwort Antworten Zitieren 0
      • B
        bwl21 @BeMiGro
        zuletzt editiert von

        @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 Antwort Letzte Antwort Antworten Zitieren 1
        • B
          BeMiGro @bwl21
          zuletzt editiert von

          @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 Antwort Letzte Antwort Antworten Zitieren 0
          • B
            bwl21 @BeMiGro
            zuletzt editiert von

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

            MichaelGM 1 Antwort Letzte Antwort Antworten Zitieren 1
            • MichaelGM
              MichaelG @bwl21
              zuletzt editiert von

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

              Installation bei CT -> immer neueste Version

              B 1 Antwort Letzte Antwort Antworten Zitieren 0
              • B
                bwl21 @MichaelG
                zuletzt editiert von

                @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 Antwort Letzte Antwort Antworten Zitieren 2
                • MichaelGM
                  MichaelG @jziegeler
                  zuletzt editiert von

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

                  Installation bei CT -> immer neueste Version

                  B 1 Antwort Letzte Antwort Antworten Zitieren 1
                  • B
                    bwl21 @MichaelG
                    zuletzt editiert von

                    @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 Antwort Letzte Antwort Antworten Zitieren 0
                    • B
                      bwl21 @bwl21
                      zuletzt editiert von

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

                      davidschillingD 1 Antwort Letzte Antwort Antworten Zitieren 0
                      • davidschillingD
                        davidschilling ChurchToolsMitarbeiter @bwl21
                        zuletzt editiert von

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

                        B 1 Antwort Letzte Antwort Antworten Zitieren 0
                        • B
                          bwl21 @davidschilling
                          zuletzt editiert von 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 Antwort Letzte Antwort Antworten Zitieren 1
                          • B
                            bwl21 @bwl21
                            zuletzt editiert von

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

                            davidschillingD 1 Antwort Letzte Antwort Antworten Zitieren 0
                            • davidschillingD
                              davidschilling ChurchToolsMitarbeiter @bwl21
                              zuletzt editiert von

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

                              B 1 Antwort Letzte Antwort Antworten Zitieren 0
                              • B
                                bwl21 @davidschilling
                                zuletzt editiert von 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 Antwort Letzte Antwort Antworten Zitieren 0
                                • Erster Beitrag
                                  Letzter Beitrag