Skip to content

Instantly share code, notes, and snippets.

@jeffdev11
Forked from GavinRay97/index.md
Created April 25, 2023 04:52
Show Gist options
  • Save jeffdev11/dc72a8dc81c99000e2293cc00d06009c to your computer and use it in GitHub Desktop.
Save jeffdev11/dc72a8dc81c99000e2293cc00d06009c to your computer and use it in GitHub Desktop.

Revisions

  1. @GavinRay97 GavinRay97 revised this gist Mar 26, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion index.md
    Original file line number Diff line number Diff line change
    @@ -37,7 +37,7 @@ And provision the permissions like such:

    Now when we query with our `X-Hasura-User-Id` set as User `1` and `3` respectively, we can see only those users in our own organizations:

    | User ID 1 (Org 1) | User ID 1 (Org 2) |
    | User ID 1 (Org 1) | User ID 3 (Org 2) |
    | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
    | ![query-as-user-org-1](https://user-images.githubusercontent.com/26604994/77601103-b6c16700-6f01-11ea-9cff-82b05c5b6914.png) | ![query-as-user-org-2](https://user-images.githubusercontent.com/26604994/77601108-b88b2a80-6f01-11ea-868e-c775c86b9041.png) |

  2. @GavinRay97 GavinRay97 revised this gist Mar 26, 2020. 1 changed file with 0 additions and 5 deletions.
    5 changes: 0 additions & 5 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -27,11 +27,6 @@ We create the following relationships on our data:
    # Permissions

    And provision the permissions like such:
    ```
    user: {"organization_users":{"organizations":{"organization_users":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_users":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_users":{"user_id":{"_eq":"X-Hasura-User-Id"}}}
    ```

    | User | Organization User | Organization |
    | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
  3. @GavinRay97 GavinRay97 revised this gist Mar 26, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion index.md
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,7 @@ This document outlines how to model a common organization-based permission syste
    | Table Name | Columns | Foreign Keys |
    |:-----------------:|:---------------------------- | ------------------------------------------------------------------------ |
    | User | id, name, email | |
    | Organization User | id, user_id, organization_id | user_id -> user.id                    organization_id -> organization.id |
    | Organization User | id, user_id, organization_id | user_id -> user.id, organization_id -> organization.id |
    | Organization | id, name | |

    # Example Data
  4. @GavinRay97 GavinRay97 revised this gist Mar 26, 2020. 1 changed file with 6 additions and 4 deletions.
    10 changes: 6 additions & 4 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@ This document outlines how to model a common organization-based permission syste

    # Example Data

    Here we have example users, two (John and Jane) beloning to Organization ID 1, and Frank belonging to Organization ID 2:
    Here we have example users, two (John and Jane) belonging to Organization ID 1, and Frank belonging to Organization ID 2:

    | User | Organization User | Organization |
    | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
    @@ -28,9 +28,9 @@ We create the following relationships on our data:

    And provision the permissions like such:
    ```
    user: {"organization_user":{"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}
    user: {"organization_users":{"organizations":{"organization_users":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_users":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_users":{"user_id":{"_eq":"X-Hasura-User-Id"}}}
    ```

    | User | Organization User | Organization |
    @@ -40,6 +40,8 @@ organization: {"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}

    # Query Results

    Now when we query with our `X-Hasura-User-Id` set as User `1` and `3` respectively, we can see only those users in our own organizations:

    | User ID 1 (Org 1) | User ID 1 (Org 2) |
    | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
    | ![query-as-user-org-1](https://user-images.githubusercontent.com/26604994/77601103-b6c16700-6f01-11ea-9cff-82b05c5b6914.png) | ![query-as-user-org-2](https://user-images.githubusercontent.com/26604994/77601108-b88b2a80-6f01-11ea-868e-c775c86b9041.png) |
  5. @GavinRay97 GavinRay97 revised this gist Mar 26, 2020. 1 changed file with 22 additions and 3 deletions.
    25 changes: 22 additions & 3 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -1,17 +1,38 @@
    # Introduction

    This document outlines how to model a common organization-based permission system in Hasura. Let's assume that you have some table structure like the following:

    | Table Name | Columns | Foreign Keys |
    |:-----------------:|:---------------------------- | ------------------------------------------------------------------------ |
    | User | id, name, email | |
    | Organization User | id, user_id, organization_id | user_id -> user.id                    organization_id -> organization.id |
    | Organization | id, name | |

    # Example Data

    Here we have example users, two (John and Jane) beloning to Organization ID 1, and Frank belonging to Organization ID 2:

    | User | Organization User | Organization |
    | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
    | ![hasura-org-permissions-user-table](https://user-images.githubusercontent.com/26604994/77601026-8679c880-6f01-11ea-82ad-25ca0411ce26.png) | ![hasura-org-permissions-org-user-table](https://user-images.githubusercontent.com/26604994/77601031-8bd71300-6f01-11ea-82ca-191e4ddb5e35.png) | ![hasura-org-permissions-org-table](https://user-images.githubusercontent.com/26604994/77601045-942f4e00-6f01-11ea-8900-a9d8c15b27c8.png) |

    # Relationships

    We create the following relationships on our data:

    | User | Organization User | Organization |
    | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
    | ![hasura-org-perms-user-relations](https://user-images.githubusercontent.com/26604994/77601068-9db8b600-6f01-11ea-9bb4-6cf4cd8f9e95.png) | ![hasura-org-perms-org-user-relations](https://user-images.githubusercontent.com/26604994/77601057-9a252f00-6f01-11ea-8f97-5972d0bb21d5.png) | ![hasura-org-perm-org-relations](https://user-images.githubusercontent.com/26604994/77601074-a4472d80-6f01-11ea-9f80-071b43d64a16.png) |

    # Permissions

    And provision the permissions like such:
    ```
    user: {"organization_user":{"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}
    ```

    | User | Organization User | Organization |
    | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
    | | | |
    @@ -23,6 +44,4 @@
    | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
    | ![query-as-user-org-1](https://user-images.githubusercontent.com/26604994/77601103-b6c16700-6f01-11ea-9cff-82b05c5b6914.png) | ![query-as-user-org-2](https://user-images.githubusercontent.com/26604994/77601108-b88b2a80-6f01-11ea-868e-c775c86b9041.png) |

    user: {"organization_user":{"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}

  6. @GavinRay97 GavinRay97 revised this gist Mar 26, 2020. 1 changed file with 14 additions and 16 deletions.
    30 changes: 14 additions & 16 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -1,30 +1,28 @@
    # Example Data

    | User | Organization User | Organization |
    | -------------------------------------------- | ------------------------------------------------ | ------------------------------------------- |
    | User | Organization User | Organization |
    | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
    | ![hasura-org-permissions-user-table](https://user-images.githubusercontent.com/26604994/77601026-8679c880-6f01-11ea-82ad-25ca0411ce26.png) | ![hasura-org-permissions-org-user-table](https://user-images.githubusercontent.com/26604994/77601031-8bd71300-6f01-11ea-82ca-191e4ddb5e35.png) | ![hasura-org-permissions-org-table](https://user-images.githubusercontent.com/26604994/77601045-942f4e00-6f01-11ea-8900-a9d8c15b27c8.png) |

    # Relationships

    | User | Organization User | Organization |
    | ------------------------------------------ | ---------------------------------------------- | ---------------------------------------- |
    | User | Organization User | Organization |
    | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
    | ![hasura-org-perms-user-relations](https://user-images.githubusercontent.com/26604994/77601068-9db8b600-6f01-11ea-9bb4-6cf4cd8f9e95.png) | ![hasura-org-perms-org-user-relations](https://user-images.githubusercontent.com/26604994/77601057-9a252f00-6f01-11ea-8f97-5972d0bb21d5.png) | ![hasura-org-perm-org-relations](https://user-images.githubusercontent.com/26604994/77601074-a4472d80-6f01-11ea-9f80-071b43d64a16.png) |

    # Permissions

    | User | Organization User | Organization |
    | ------------------------------------- | ----------------------------------------- | ------------------------------------------ |
    |
    ![hasura-org-perm-user-perms](https://user-images.githubusercontent.com/26604994/77601086-ac9f6880-6f01-11ea-82aa-d171502de47e.png) | ![hasura-org-perm-org-user-perms](https://user-images.githubusercontent.com/26604994/77601100-b45f0d00-6f01-11ea-9231-c62f8b332c1a.png) | ![hasura-org-permissions-org-perm](https://user-images.githubusercontent.com/26604994/77601092-af9a5900-6f01-11ea-92b4-578aca118332.png) |
    | User | Organization User | Organization |
    | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
    | | | |
    | ![hasura-org-perm-user-perms](https://user-images.githubusercontent.com/26604994/77601086-ac9f6880-6f01-11ea-82aa-d171502de47e.png) | ![hasura-org-perm-org-user-perms](https://user-images.githubusercontent.com/26604994/77601100-b45f0d00-6f01-11ea-9231-c62f8b332c1a.png) | ![hasura-org-permissions-org-perm](https://user-images.githubusercontent.com/26604994/77601092-af9a5900-6f01-11ea-92b4-578aca118332.png) |

    # Query Results

    | User ID 1 (Org 1) | User ID 1 (Org 2) |
    | ------------------------------ | ------------------------------ |
    | ![query-as-user-org-1](https://user-images.githubusercontent.com/26604994/77601103-b6c16700-6f01-11ea-9cff-82b05c5b6914.png)
    | ![query-as-user-org-2](https://user-images.githubusercontent.com/26604994/77601108-b88b2a80-6f01-11ea-868e-c775c86b9041.png)
    |
    | User ID 1 (Org 1) | User ID 1 (Org 2) |
    | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
    | ![query-as-user-org-1](https://user-images.githubusercontent.com/26604994/77601103-b6c16700-6f01-11ea-9cff-82b05c5b6914.png) | ![query-as-user-org-2](https://user-images.githubusercontent.com/26604994/77601108-b88b2a80-6f01-11ea-868e-c775c86b9041.png) |

    user: {"organization_user":{"organization":{"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}
    user: {"organization_user":{"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_user":{"user_id":{"\_eq":"X-Hasura-User-Id"}}}
  7. @GavinRay97 GavinRay97 revised this gist Mar 26, 2020. 1 changed file with 7 additions and 4 deletions.
    11 changes: 7 additions & 4 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -2,25 +2,28 @@

    | User | Organization User | Organization |
    | -------------------------------------------- | ------------------------------------------------ | ------------------------------------------- |
    | ![](./hasura-org-permissions-user-table.png) | ![](./hasura-org-permissions-org-user-table.png) | ![](./hasura-org-permissions-org-table.png) |
    | ![hasura-org-permissions-user-table](https://user-images.githubusercontent.com/26604994/77601026-8679c880-6f01-11ea-82ad-25ca0411ce26.png) | ![hasura-org-permissions-org-user-table](https://user-images.githubusercontent.com/26604994/77601031-8bd71300-6f01-11ea-82ca-191e4ddb5e35.png) | ![hasura-org-permissions-org-table](https://user-images.githubusercontent.com/26604994/77601045-942f4e00-6f01-11ea-8900-a9d8c15b27c8.png) |

    # Relationships

    | User | Organization User | Organization |
    | ------------------------------------------ | ---------------------------------------------- | ---------------------------------------- |
    | ![](./hasura-org-perms-user-relations.png) | ![](./hasura-org-perms-org-user-relations.png) | ![](./hasura-org-perm-org-relations.png) |
    | ![hasura-org-perms-user-relations](https://user-images.githubusercontent.com/26604994/77601068-9db8b600-6f01-11ea-9bb4-6cf4cd8f9e95.png) | ![hasura-org-perms-org-user-relations](https://user-images.githubusercontent.com/26604994/77601057-9a252f00-6f01-11ea-8f97-5972d0bb21d5.png) | ![hasura-org-perm-org-relations](https://user-images.githubusercontent.com/26604994/77601074-a4472d80-6f01-11ea-9f80-071b43d64a16.png) |

    # Permissions

    | User | Organization User | Organization |
    | ------------------------------------- | ----------------------------------------- | ------------------------------------------ |
    | ![](./hasura-org-perm-user-perms.png) | ![](./hasura-org-perm-org-user-perms.png) | ![](./hasura-org-permissions-org-perm.png) |
    |
    ![hasura-org-perm-user-perms](https://user-images.githubusercontent.com/26604994/77601086-ac9f6880-6f01-11ea-82aa-d171502de47e.png) | ![hasura-org-perm-org-user-perms](https://user-images.githubusercontent.com/26604994/77601100-b45f0d00-6f01-11ea-9231-c62f8b332c1a.png) | ![hasura-org-permissions-org-perm](https://user-images.githubusercontent.com/26604994/77601092-af9a5900-6f01-11ea-92b4-578aca118332.png) |

    # Query Results

    | User ID 1 (Org 1) | User ID 1 (Org 2) |
    | ------------------------------ | ------------------------------ |
    | ![](./query-as-user-org-1.png) | ![](./query-as-user-org-2.png) |
    | ![query-as-user-org-1](https://user-images.githubusercontent.com/26604994/77601103-b6c16700-6f01-11ea-9cff-82b05c5b6914.png)
    | ![query-as-user-org-2](https://user-images.githubusercontent.com/26604994/77601108-b88b2a80-6f01-11ea-868e-c775c86b9041.png)
    |

    user: {"organization_user":{"organization":{"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}
  8. @GavinRay97 GavinRay97 created this gist Mar 26, 2020.
    27 changes: 27 additions & 0 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    # Example Data

    | User | Organization User | Organization |
    | -------------------------------------------- | ------------------------------------------------ | ------------------------------------------- |
    | ![](./hasura-org-permissions-user-table.png) | ![](./hasura-org-permissions-org-user-table.png) | ![](./hasura-org-permissions-org-table.png) |

    # Relationships

    | User | Organization User | Organization |
    | ------------------------------------------ | ---------------------------------------------- | ---------------------------------------- |
    | ![](./hasura-org-perms-user-relations.png) | ![](./hasura-org-perms-org-user-relations.png) | ![](./hasura-org-perm-org-relations.png) |

    # Permissions

    | User | Organization User | Organization |
    | ------------------------------------- | ----------------------------------------- | ------------------------------------------ |
    | ![](./hasura-org-perm-user-perms.png) | ![](./hasura-org-perm-org-user-perms.png) | ![](./hasura-org-permissions-org-perm.png) |

    # Query Results

    | User ID 1 (Org 1) | User ID 1 (Org 2) |
    | ------------------------------ | ------------------------------ |
    | ![](./query-as-user-org-1.png) | ![](./query-as-user-org-2.png) |

    user: {"organization_user":{"organization":{"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}}
    organization_user: {"organization":{"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}}
    organization: {"organization_user":{"user_id":{"_eq":"X-Hasura-User-Id"}}}