Gelöst Abfrage bzw. setzen der Permissions per API
-
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
-
@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.
-
@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
-
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.
-
@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.
-
@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. -
@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.
-
@bwl21 könnte sowas sogar offiziell Teil von CT werden?
-
@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
-
@jziegeler vielleicht könntet ihr was in die Richtung überlegen. Die Rechtsverwaltung ist mächtig und fragil zugleich
-
@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.
-
@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 neuedomain_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? -
@bwl21 domain_id ist in diesem Fall die Id des
groupMemberstatus
für den die Berechtigung bergeben wird. -
@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 Eintrags1193
nach z.B840
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.
-
@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?
-
@bwl21 schau am besten mal in eurem ChurchTools Log nach ob dort ein Fehler sichtbar ist.
-
@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.