Vérifier l'accès des membres
Utilisez cette skill pour répondre à « que peut faire cette personne ici ? » à partir des outils de contrôle d'accès. Les outils retournent le niveau appliqué et sa source. Cette skill permet de les interpréter correctement.
Quand utiliser cette skill
- « Que peut faire ce membre dans ce projet ? » / « Ce membre peut-il modifier les feature flags ? »
- « Qui peut modifier les dashboards ? » / « Qui n'a accès à aucune expérience ? »
- « Pourquoi ce membre ne peut pas ouvrir ce dashboard ? » / « De quelles tables ce rôle est-il exclu ? »
- « Quelles propriétés sont masquées au rôle support ? »
- « Que donne le rôle
analyst? » / « Quel est l'accès par défaut dans ce projet ? »
Non pour modifier les règles. Les outils de lecture ne peuvent pas écrire, et c'est la page des paramètres où les règles sont modifiées.
Disponibilité par plan
- Les plans gratuit et à l'usage n'ont pas de contrôle d'accès, et les outils de contrôle d'accès ne leur sont pas proposés. Si les outils manquent du catalogue, dites que le plan n'inclut pas le contrôle d'accès et suggérez une mise à niveau vers le plan Boost. Consultez la comparaison des plans : https://posthog.com/platform-packages.
- Boost et Scale incluent les niveaux par défaut et les règles pour les membres individuels sur le projet, sur les outils, sur les objets et sur les propriétés.
- Les rôles existent sur tous les plans, mais les règles de rôles sont une fonctionnalité Enterprise : elles ne peuvent être définies et appliquées que là, et les trois outils d'accès par rôles ne sont proposés que là. Si les outils manquent, dites que le contrôle d'accès basé sur les rôles nécessite le plan Enterprise, avec le même lien. Sur les autres plans, les rôles d'un membre ne changent jamais le niveau appliqué.
- Les outils n'indiquent pas quel plan l'organisation utilise. Une
source_subjectderolen'importe où dans un résultatmembers-listprouve que les règles de rôles sont appliquées. Sans cela, demandez à l'utilisateur si l'organisation est sur Enterprise avant de parcourir les rôles à l'étape 4 du flux.
Comment l'accès se résout
- Étendues. Le projet lui-même, puis chaque outil (
dashboard,insight,feature_flag,notebook,experiment,warehouse_objects, etc.), puis les objets individuels dans un outil, puis les propriétés des personnes et événements. Les noms d'outils sont les clés deresourcesdans une entrée members-list. - Niveaux de projet.
memberpeut voir et modifier les ressources que leurs autres règles permettent.adminpeut aussi modifier les paramètres du projet, gérer les règles d'accès du projet et supprimer le projet. - Niveaux d'outil et d'objet.
nonene peut pas voir.viewerpeut voir mais pas modifier.editorpeut voir et modifier.managerpeut aussi gérer les règles d'accès de l'outil ou de l'objet. Ordre :none<viewer<editor<manager. - Niveaux de propriété.
nonemasque la propriété.readl'affiche.read_writepermet aussi les modifications. Chaque propriété estread_writesauf si une règle existe. - Bornes.
minimumetmaximumpar outil, surdefaults-get, sont les niveaux qu'une règle peut définir. Un outil avecminimumviewerne peut jamais être défini ànone. - Sujets. Une règle appartient à un membre, un rôle, ou tout le monde dans le projet (par défaut).
- Admins et propriétaires de l'organisation ont un accès complet à tout dans chaque projet. Aucune règle ne s'applique à eux.
organization_levelest un nombre : 1 membre, 8 admin, 15 propriétaire. - Créateurs ont un accès complet aux objets qu'ils ont créés, et seulement ceux-là. Un membre avec
viewersur les dashboards peut quand même modifier le dashboard qu'il a créé, et ne peut pas modifier les autres. - Deux modes de résolution. Les organisations résolvent les règles soit du plus spécifique au plus général (règle membre, puis règles rôles, puis défaut, et règle d'objet avant règle d'outil), soit en mode legacy (le plus élevé entre la propre règle du membre et ses règles rôles gagne). Les outils ne disent pas quel mode s'applique. Le serveur l'a déjà appliqué. Donc faites confiance à
effective_access_levelet ne le recalculez jamais à partir des règles stockées. Si l'utilisateur demande pourquoi, expliquez à partir deinherited_access, pas à partir de votre propre ordre de préséance.
Outils disponibles
| Outil | Retourne |
|---|---|
posthog:access-control-members-list |
L'accès appliqué de chaque membre au projet et à chaque outil. member_id limite à un membre. |
posthog:access-control-roles-list |
Le même par rôle. role_id limite à un rôle. |
posthog:access-control-defaults-get |
La baseline du projet, et quels outils acceptent les règles sur les objets individuels. |
posthog:access-control-member-objects-list |
Les règles d'objet définies pour un membre : chaque objet avec une règle pour ce membre. |
posthog:access-control-member-properties-list |
Les règles de propriété définies pour un membre. |
posthog:access-control-role-objects-list |
Les règles d'objet définies pour un rôle. |
posthog:access-control-role-properties-list |
Les règles de propriété définies pour un rôle. |
posthog:access-control-default-objects-list |
Les règles d'objet qui s'appliquent à tout le monde dans le projet. |
posthog:access-control-default-properties-list |
Les règles de propriété qui s'appliquent à tout le monde dans le projet. |
posthog:org-members-list |
Ids d'adhésion, noms et niveaux d'organisation. Aucun détail d'accès au projet. |
posthog:roles-list, posthog:role-members-list |
Noms de rôles par id, et qui est dans un rôle. |
Tous les outils de contrôle d'accès acceptent un id de projet optionnel et utilisent le projet actif par défaut.
Flux
- Trouvez l'id du sujet.
member_idest l'id d'adhésion à l'organisation : l'iddeorg-members-list, ouorganization_membership_iddemembers-list. Ce n'est pas l'id utilisateur ni l'uuid utilisateur.role_idest l'idderoles-list. - Les questions au niveau de l'outil nécessitent un appel. « Ce membre peut-il voir les dashboards ? » ou « Quel accès aux feature flags ce membre a-t-il ? » est
members-listavecmember_id. L'effective_access_levelpour cet outil est la réponse complète. Il inclut déjà les rôles du membre, le défaut du projet et les contournements. - Expliquez le niveau à partir de
inherited_access. Voir le tableau ci-dessous. Ne mentionnez l'access_levelstocké que s'il diffère du niveau appliqué. - Les questions sur les objets nécessitent l'objet et ses règles. « Ce membre peut-il ouvrir le dashboard 42 ? » ne peut pas être répondu au niveau de l'outil seul. Vérifiez dans cet ordre, et arrêtez au premier résultat :
organization_levelest 8 ou 15 sur l'entrée du membre : accès complet, aucune règle ne s'applique.- Le membre a créé l'objet : accès complet, aucune règle ne s'applique. Les outils de règles ne disent pas qui a créé un objet, donc récupérez-le avec son outil get, par exemple
dashboard-getouinsight-get, et comparezcreated_by.uuidavecuser.uuidsur l'entrée du membre. - Une règle sur cet objet. Les outils de membre ne retournent que les règles définies pour ce membre, donc collectez
member-objects-list,role-objects-listpour chaque id dans lesrole_idsdu membre, etdefault-objects-list, et sélectionnez les lignes pour cet objet. Dites à l'utilisateur combien de rôles vous devriez parcourir et demandez avant de le faire pour un membre dans de nombreux rôles. - Aucune règle sur l'objet : la réponse au niveau de l'outil de l'étape 2 s'applique.
- Plusieurs règles sur un objet. Quand le membre, un rôle et le défaut définissent chacun un niveau sur le même objet, le serveur en choisit un selon le mode de résolution de l'organisation, et aucun outil ne retourne ce choix pour un autre membre. Signalez chaque règle que vous avez trouvée avec son sujet, dites que l'appliquée dépend du mode, et ne devinez pas. Les questions de propriété fonctionnent comme l'étape 4 avec les outils de propriétés, moins la vérification du créateur, puisque les propriétés n'ont pas de créateur.
- Les questions « Qui peut ... » sont
members-listsansmember_id, filtrées surresources.<tool>.effective_access_level. La réponse est chaque membre fois chaque outil et n'a pas de pagination. Pour une grande organisation, demandez d'abord qui l'utilisateur doit vérifier, ou répondez par membre.
Lire une entrée
| Champ | Signification |
|---|---|
access_level |
La propre règle stockée du sujet pour cette étendue. null signifie qu'il n'a pas sa propre règle. |
effective_access_level |
Ce qui est appliqué. null signifie que rien ne se résout pour cette étendue. Ce n'est pas « pas d'accès ». |
inherited_access |
Le niveau auquel le sujet revient sans règle propre, et d'où il vient. null quand rien ne le fournit. |
inherited_access.source |
resource ou parent_resource pour une règle d'outil, object ou parent_object pour une règle d'objet, system_default pour le défaut PostHog. org_admin et creator sont les contournements décrits ci-dessus. org_membership apparaît seulement quand l'objet est l'organisation elle-même. |
inherited_access.source_subject |
member, role ou default : dont la règle l'a fourni. null quand un contournement ou le défaut PostHog l'a fourni. |
Comment formuler la réponse :
sourceestorg_admin: « Ce membre est un admin de l'organisation et a un accès complet à tout. » Les règles stockées ne s'appliquent pas à eux.access_levelest défini et égal àeffective_access_level: « Ce membre a une règle explicite : editor. »access_levelestnulletsource_subjectestrole: « Ce membre a l'accès editor, basé sur un rôle. » Le nom du rôle n'est pas dans l'entrée ;roles-listl'a si l'utilisateur le veut.access_levelestnulletsource_subjectestdefault: « Ce membre a l'accès viewer, basé sur le défaut du projet. »sourceestsystem_default: « Aucune règle n'est définie nulle part, donc le défaut PostHog s'applique. »effective_access_levelestnull: « Rien ne se résout pour cet outil ici. » Ne le lisez pas comme pas d'accès.
Pièges
- Une liste d'objets ou de propriétés vide signifie pas de règles de ce type, pas pas d'accès. L'entrée au niveau de l'outil s'applique toujours.
- Un membre manquant de
members-listn'est pas une preuve de pas d'accès. Un appelant qui n'est pas un admin de l'organisation, dans une organisation où les membres ne se voient pas, ne voit que les membres avec accès scoped au projet. can_editsur les listes de membres et de rôles décrit l'appelant, pas le sujet : si la personne exécutant l'outil peut modifier les règles.available_project_levelsetavailable_resource_levelssont le vocabulaire, du plus bas au plus élevé. Utilisez-les pour comparer les niveaux au lieu d'assumer un ordre.object_rule_resourcessurdefaults-getliste les outils qui acceptent les règles sur les objets individuels. Un outil qui n'est pas dans cette liste n'a pas de règles d'objet à chercher.