Rollen
`roles.list`, `list_all`, `iterate`, `get`, `create`, `update`, `delete` und `list_permissions`.
Jede Methode
page = client.roles.listputs page.items.size role = client.roles.get("role_8b1f4c2e9a7d3b60e5f1a2c4")puts role[:name] support = client.roles.create( name: "Support", description: "Answers the shared inboxes and nothing else.", permissions: ["emails:send", "threads:write", "labels:write"]) p support[:permissions] client.roles.update(support[:id], permissions: [*support[:permissions], "templates:read"]) client.roles.delete(support[:id], reassign_to: role[:id]) vocabulary = client.roles.list_permissionsp vocabulary.map { |permission| permission[:id] }support[:permissions] enthält sechs Einträge, nicht drei: emails:send bringt emails:read mit, threads:write bringt threads:read mit und labels:write bringt labels:read mit. Lesen Sie die Liste zurück, statt sie anzunehmen.
list gibt eine OpenEmail::Page zurück, list_all gibt alle Rollen in einem einzigen Array zurück, und iterate übergibt jede Rolle an einen Block oder gibt ohne Block einen Enumerator zurück. Eine Rolle kommt als Hash mit Symbol-Schlüsseln zurück, role[:permissions] liest also die Liste. create und update nehmen die Body-Felder als Keywords oder als einzelnen Hash, während delete reassign_to: nimmt, ein Keyword in snake_case, das das Gem für die API umbenennt.
Eine Rolle sagt, was jemand TUN darf. Auf welche ADRESSEN sich das bezieht, ist die andere Achse und liegt auf client.members: Siehe grant_address und revoke_address auf der Seite Mitglieder. „Darf Mail senden“ und „darf als invoices@ senden“ sind zwei verschiedene Sätze, und ein Workspace, der eine zweite Support-Kraft einstellt, ändert den zweiten, ohne den ersten anzurühren. Eine Berechtigung beantwortet beides: Eine Rolle mit addresses:all erreicht jede Adresse, auch später hinzugefügte, ohne Freigabe, und nur eine Person in der App kann sie einer Rolle geben.
Verzweigen Sie über editable und deletable und nicht über builtin oder den Namen. Beide sind allein für die Owner-Rolle false, deren Liste „jede Berechtigung, einschließlich der erst nächstes Jahr erfundenen“ lautet und die berechnet statt gespeichert wird. Jede andere Rolle antwortet auf beide mit true, einschließlich der fünf, mit denen ein Workspace initial bestückt wird. Eine von jemandem umbenannte Rolle antwortet auf beide weiterhin korrekt, und ihr Name sagt Ihnen nichts mehr.
update ERSETZT die Berechtigungsliste. Es gibt keinen Aufruf, der eine einzelne Berechtigung vergibt. Lesen Sie daher die Rolle, ändern Sie den gemeinten Eintrag und senden Sie alle zurück, wie es [*support[:permissions], "templates:read"] oben tut. Wird eine einzige Berechtigung gesendet, hält die Rolle danach genau diese eine, zuzüglich dessen, was sie impliziert.
delete benötigt reassign_to:, sobald irgendjemand die Rolle innehat. Das Gem sendet es als Query-Parameter reassignTo, weil ein Body bei DELETE von mehreren Runtimes und etlichen Proxys verworfen wird, und lässt den Parameter weg, wenn Sie nichts übergeben. Das Ergebnis meldet reassigned und keysReassigned getrennt, sodass ein Skript protokollieren kann, was es getan hat, und nicht, was es angefordert hat.
list_permissions ist GET /roles/permissions, ein fester Pfad genau an der Stelle, an der eine Rollen-id stünde. Das Gem ruft diesen Pfad direkt auf, statt das Wort durch get zu reichen, und gibt ein einfaches Array zurück, keine OpenEmail::Page: einen Hash pro Berechtigung, mit id, label, group und scope. scope: false markiert die Einträge, die kein Schlüssel je halten kann. Übergeben Sie das Wort nicht selbst an get. client.roles.get("permissions") baut denselben Pfad, sendet also dieselbe Anfrage und bekommt das Vokabular zurück statt einer Rolle oder eines 404.
Eine Rolle ist die Obergrenze für einen Key
Ein gegen eine Rolle ausgestellter Schlüssel darf das, was der SCHNITT aus seinen eigenen Scopes und den Berechtigungen dieser Rolle ergibt, aufgelöst pro Anfrage an der Grenze. Eine Rolle einzuschränken entzieht ihren Schlüsseln also live Rechte, ohne dass einer von ihnen rotiert wird. Ein Schlüssel ohne Rolle hat überhaupt keine Obergrenze, womit eine roleId von nil der weiteste Zustand ist, in dem ein Schlüssel sein kann, und nicht der engste.
Das ist auch der Grund, warum roles.delete darauf besteht, dass es ein Ziel gibt, an das die Keys verschoben werden. Sie verwaist zurückzulassen würde ihre Obergrenze vollständig entfernen und damit stillschweigend jedes Credential heraufstufen, das die Rolle gedeckelt hat.
GET /keys/self und GET /ping melden roleId und grantedScopes neben den effektiven scopes. So wird „mein Schlüssel hat emails:send und ich bekomme insufficient_scope“ beantwortet: Alles, was in grantedScopes steht und in scopes fehlt, hat die Rolle genommen. client.me.get und client.me.ping geben beides in ihrem Hash zurück, key[:grantedScopes] - key[:scopes] listet also, was die Rolle genommen hat. Die Ablehnung selbst ist ein OpenEmail::PermissionError, dessen scope_missing? true ist.
Parameter
nameStringerforderlich- Wie der Workspace die Rolle nennt: 1 bis 48 Zeichen, vor dem Speichern getrimmt. Namen sind pro Workspace ohne Beachtung der Groß- und Kleinschreibung eindeutig, ein zweites „Support“ wird daher mit `role_name_taken` (409) abgelehnt, ausgelöst als `OpenEmail::ConflictError`, statt neben dem ersten angelegt zu werden.
descriptionString- Ein Satz, der beschreibt, wozu die Rolle da ist, getrimmt und höchstens 240 Zeichen. Ein String, der nach dem Trimmen leer ist, wird als nil gespeichert, eine Beschreibung aus Leerzeichen kommt also als nil zurück und nicht als das Gesendete. Lassen Sie sie bei `create` weg, statt nil zu übergeben: Das Gem sendet ein nil unverändert, und `create` lehnt es mit einem 422 ab. Bei `update` löscht `description: nil` die Beschreibung.
permissionsArray<String>erforderlich- Was die Rolle gewährt, entnommen dem Vokabular, das `list_permissions` ausliefert. Ein String, der nicht darin enthalten ist, ergibt einen 422 auf `permissions`, ausgelöst als `OpenEmail::ValidationError` mit `param` gleich `permissions`, und wird nicht stillschweigend verworfen, sodass ein Tippfehler gemeldet wird, statt Sie einen Nachmittag zu kosten. Die Liste wird beim Eingang AUFGEWEITET (`templates:write` speichert `templates:read` daneben), dedupliziert und wieder in die kanonische Reihenfolge gebracht. Lesen Sie die gespeicherte Liste daher aus der Antwort, statt anzunehmen, dass es die gesendete ist.
Antwort
objectString- Immer `role`. Der Tombstone beim Löschen antwortet mit demselben Wert, der `id` der Rolle, `deleted: true` und den beiden Umhängungszählern, und mit keinem der übrigen Felder unten.
idString- Die id der Rolle, gelesen als `role[:id]`. Sie ist das, was die `roleId` eines Mitglieds benennt, worauf die Obergrenze eines API-Schlüssels zeigt und was `reassign_to:` entgegennimmt, wenn eine andere Rolle gelöscht wird und ihre Inhaber zu dieser wechseln.
nameString- Der Name, den der Workspace der Rolle gibt, getrimmt und ohne Beachtung der Groß- und Kleinschreibung eindeutig. Jede Rolle außer der des Owners kann umbenannt werden, die initial angelegten eingeschlossen (`builtin` sagt, woher eine Zeile stammt, nicht, wie sie heißen muss). Lesen Sie „Admin“ daher nicht als Versprechen darüber, was die Rolle hält. Ein Name, auf den bereits eine andere Rolle hört, ergibt `role_name_taken` (409, mit `param` gleich `name`). Den Owner umzubenennen ergibt `role_immutable` (409), wie jede andere Bearbeitung dieser Rolle.
descriptionString or nil- Der Satz, der die Rolle beschreibt, oder nil, wenn keiner angegeben wurde. Leere Eingaben werden sowohl bei create als auch bei update als nil gespeichert, dieses Feld ist daher nie ein leerer String.
permissionsArray<String>- Alles, was die Rolle gewährt, bereits aufgeweitet und in kanonischer Reihenfolge statt in der Reihenfolge, in der es jemand getippt hat. Diese Ordnung ist tragend: Zwei Rollen mit denselben Berechtigungen halten gleiche Arrays, und genau das erlaubt es einem Einstellungsbildschirm, sie mit `==` zu vergleichen und so zu entscheiden, ob „Speichern“ aktiv ist.
builtinString or nil- Aus welcher der sechs initial angelegten Rollen diese Zeile stammt, `owner`, `admin`, `member`, `viewer`, `developer` oder `billing`, oder nil bei einer, die der Workspace selbst geschrieben hat. Festgehalten wird die Herkunft, kein Status: Eine initial angelegte Rolle wird wie jede andere umbenannt, neu berechtigt und gelöscht. Verzweigen Sie über `editable` und `deletable` und nicht hierüber. Eine Rolle, die jemand „Admin“ genannt hat, muss nicht die initial angelegte sein, und die initial angelegte heißt vielleicht nicht mehr so.
editableBoolean- Berechnet als `builtin != "owner"`, also allein für die Owner-Rolle false, und jedes `update` dieser Rolle wird mit `role_immutable` (409) abgelehnt. Jede andere Rolle ist vollständig bearbeitbar (Name, Beschreibung und Berechtigungen), einschließlich der fünf, mit denen ein Workspace initial bestückt wird.
deletableBoolean- Berechnet als `builtin != "owner"`: false allein für die Owner-Rolle, die mit `role_undeletable` (409) zurückkommt, und true für jede andere Rolle, die initial angelegten eingeschlossen. Prüfen Sie es, bevor Sie den Button anbieten, und nicht erst nach der Ablehnung. Eine Rolle, die jemand noch innehat, braucht zusätzlich `reassign_to:`, sonst ergibt das Löschen `role_in_use` (409). Beide Ablehnungen werden als `OpenEmail::ConflictError` ausgelöst, und `code` unterscheidet sie.
membersInteger- Wie viele Personen diese Rolle innehaben, gezählt aus den Mitgliederzeilen des Workspace. Der Owner zählt nicht dazu: Er hat keine Mitgliederzeile und kann keine Rolle erhalten, daher meldet die Owner-Rolle null Inhaber, obwohl die Mitgliederliste ihn anzeigt.
apiKeysInteger- Wie viele aktive API-Schlüssel durch diese Rolle gedeckelt sind. Widerrufene Schlüssel bleiben in der Zählung unberücksichtigt, obwohl ein Löschen jede Schlüsselzeile umhängt, die auf die Rolle zeigt, die widerrufenen eingeschlossen. Das ist die zweite Population, die verschoben werden muss, bevor die Rolle gehen kann, und die, die niemand bemerkt: Schlüssel sind Programme, und ein Programm beschwert sich nicht.
createdAtString- Wann die Zeile der Rolle geschrieben wurde, als String nach ISO 8601. Eingebaute Zeilen werden verzögert angelegt, sobald etwas sie erstmals benötigt, etwa das Lesen einer Rollenliste, das Anlegen einer Rolle oder der Bildschirm für API-Schlüssel, und nicht bei der Erstellung des Workspace. Der Zeitstempel einer eingebauten Rolle ist also der Zeitpunkt, an dem diese erste Anfrage eintraf, und nicht der, an dem der Workspace angelegt wurde.
updatedAtString- Wann sich die Rolle zuletzt geändert hat, als String nach ISO 8601. Jedes akzeptierte `update` bewegt den Wert, auch eines, das ein Feld auf den bereits gehaltenen Wert setzt.