{"id":22213936,"url":"https://github.com/xmlking/nhost-multi-tenancy-experiment","last_synced_at":"2026-01-05T18:03:53.394Z","repository":{"id":265976068,"uuid":"896232419","full_name":"xmlking/nhost-multi-tenancy-experiment","owner":"xmlking","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-09T22:08:38.000Z","size":1252,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T05:43:16.894Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xmlking.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-29T20:47:31.000Z","updated_at":"2024-12-09T22:08:42.000Z","dependencies_parsed_at":"2024-12-01T22:34:23.268Z","dependency_job_id":null,"html_url":"https://github.com/xmlking/nhost-multi-tenancy-experiment","commit_stats":null,"previous_names":["xmlking/nhost-multi-tenancy-experiment"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fnhost-multi-tenancy-experiment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fnhost-multi-tenancy-experiment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fnhost-multi-tenancy-experiment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fnhost-multi-tenancy-experiment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xmlking","download_url":"https://codeload.github.com/xmlking/nhost-multi-tenancy-experiment/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245409492,"owners_count":20610535,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-02T21:12:39.453Z","updated_at":"2026-01-05T18:03:48.344Z","avatar_url":"https://github.com/xmlking.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nHost multi-tenancy experiment\n\n## Start\n\n```shell\nnhost down --volumes\nnhost up --apply-seeds\n```\n\n## Test\n\nSwitch `is_current_org` true between:\n1. org_id = `8dfd9a31-de01-47be-92a7-ba1c720c6270`  (role: `org:owner`) \n2. org_id = `d5dbb6b6-5e43-4dca-b855-be9b65b6695b`  (role: `org:member`)\n\nfor user_id = `572ad1c0-f97b-4e16-b1f6-8b5ca90f931f` and test below **SignIn** request via [auth.http](auth.http)\n\n```sql\nUPDATE public.user_org_roles SET is_current_org = true WHERE user_id = '572ad1c0-f97b-4e16-b1f6-8b5ca90f931f' and org_id = 'd5dbb6b6-5e43-4dca-b855-be9b65b6695b';\nUPDATE public.user_org_roles SET is_current_org = true WHERE user_id = '572ad1c0-f97b-4e16-b1f6-8b5ca90f931f' and org_id = '8dfd9a31-de01-47be-92a7-ba1c720c6270';\n```\n\n```http\n### SignIn\n# @name signIn\nPOST {{authEndpoint}}/signin/email-password\nContent-Type: application/json\n\n{\n  \"email\": \"john.smith@chinthagunta.com\",\n  \"password\": \"Str0ngPassw#ord-94|%\"\n}\n```\n\nOr\n\n```shell\nhttp POST  https://local.auth.local.nhost.run/v1/signin/email-password \\\n email=john.smith@chinthagunta.com \\\n password='Str0ngPassw#ord-94|%'\n```\n\nResponse\n\n```\nHTTP/1.1 200 OK\nContent-Length: 1366\nContent-Type: application/json\nDate: Sun, 08 Dec 2024 21:58:44 GMT\n\n{\n    \"session\": {\n        \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzM2OTYwMjQsImh0dHBzOi8vaGFzdXJhLmlvL2p3dC9jbGFpbXMiOnsieC1oYXN1cmEtYWxsb3dlZC1yb2xlcyI6WyJ1c2VyIiwibWUiLCJvcmc6b3duZXIiXSwieC1oYXN1cmEtZGVmYXVsdC1yb2xlIjoib3JnOm93bmVyIiwieC1oYXN1cmEtb3JnLWlkIjoiOGRmZDlhMzEtZGUwMS00N2JlLTkyYTctYmExYzcyMGM2MjcwIiwieC1oYXN1cmEtb3JnLWlkcyI6IntcImQ1ZGJiNmI2LTVlNDMtNGRjYS1iODU1LWJlOWI2NWI2Njk1YlwiLFwiOGRmZDlhMzEtZGUwMS00N2JlLTkyYTctYmExYzcyMGM2MjcwXCJ9IiwieC1oYXN1cmEtdXNlci1lbWFpbCI6ImpvaG4uc21pdGhAY2hpbnRoYWd1bnRhLmNvbSIsIngtaGFzdXJhLXVzZXItaWQiOiI1NzJhZDFjMC1mOTdiLTRlMTYtYjFmNi04YjVjYTkwZjkzMWYiLCJ4LWhhc3VyYS11c2VyLWlzLWFub255bW91cyI6ImZhbHNlIn0sImlhdCI6MTczMzY5NTEyNCwiaXNzIjoiaGFzdXJhLWF1dGgiLCJzdWIiOiI1NzJhZDFjMC1mOTdiLTRlMTYtYjFmNi04YjVjYTkwZjkzMWYifQ.b-GORjchcVoj1M_FrBanEAKu6n4mSSjTLvAQwrXRLqk\",\n        \"accessTokenExpiresIn\": 900,\n        \"refreshToken\": \"29b90216-1cb9-49e9-9124-47348212e443\",\n        \"refreshTokenId\": \"a905e591-e9bf-49ed-a05f-fab91728634c\",\n        \"user\": {\n            \"avatarUrl\": \"https://www.gravatar.com/avatar/1c874909e198bf87d38b50ef7e4d3163?d=mp\u0026r=g\",\n            \"createdAt\": \"2024-12-02T03:17:53.317046Z\",\n            \"defaultRole\": \"org:owner\",\n            \"displayName\": \"John Smith\",\n            \"email\": \"john.smith@chinthagunta.com\",\n            \"emailVerified\": false,\n            \"id\": \"572ad1c0-f97b-4e16-b1f6-8b5ca90f931f\",\n            \"isAnonymous\": false,\n            \"locale\": \"en\",\n            \"metadata\": {},\n            \"phoneNumberVerified\": false,\n            \"roles\": [\n                \"user\",\n                \"me\",\n                \"org:owner\"\n            ]\n        }\n    }\n}\n```\n\n```json\n{\n  \"exp\": 1733696024,\n  \"https://hasura.io/jwt/claims\": {\n    \"x-hasura-allowed-roles\": [\n      \"user\",\n      \"me\",\n      \"org:owner\"\n    ],\n    \"x-hasura-default-role\": \"org:owner\",\n    \"x-hasura-org-id\": \"8dfd9a31-de01-47be-92a7-ba1c720c6270\",\n    \"x-hasura-org-ids\": \"{\\\"d5dbb6b6-5e43-4dca-b855-be9b65b6695b\\\",\\\"8dfd9a31-de01-47be-92a7-ba1c720c6270\\\"}\",\n    \"x-hasura-user-email\": \"john.smith@chinthagunta.com\",\n    \"x-hasura-user-id\": \"572ad1c0-f97b-4e16-b1f6-8b5ca90f931f\",\n    \"x-hasura-user-is-anonymous\": \"false\"\n  },\n  \"iat\": 1733695124,\n  \"iss\": \"hasura-auth\",\n  \"sub\": \"572ad1c0-f97b-4e16-b1f6-8b5ca90f931f\"\n}\n```\n\nAfter switching `current_org`\n\n```\nHTTP/1.1 200 OK\nContent-Length: 1370\nContent-Type: application/json\nDate: Sun, 08 Dec 2024 21:58:33 GMT\n\n{\n    \"session\": {\n        \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzM2OTYwMTMsImh0dHBzOi8vaGFzdXJhLmlvL2p3dC9jbGFpbXMiOnsieC1oYXN1cmEtYWxsb3dlZC1yb2xlcyI6WyJ1c2VyIiwibWUiLCJvcmc6bWVtYmVyIl0sIngtaGFzdXJhLWRlZmF1bHQtcm9sZSI6Im9yZzptZW1iZXIiLCJ4LWhhc3VyYS1vcmctaWQiOiJkNWRiYjZiNi01ZTQzLTRkY2EtYjg1NS1iZTliNjViNjY5NWIiLCJ4LWhhc3VyYS1vcmctaWRzIjoie1wiOGRmZDlhMzEtZGUwMS00N2JlLTkyYTctYmExYzcyMGM2MjcwXCIsXCJkNWRiYjZiNi01ZTQzLTRkY2EtYjg1NS1iZTliNjViNjY5NWJcIn0iLCJ4LWhhc3VyYS11c2VyLWVtYWlsIjoiam9obi5zbWl0aEBjaGludGhhZ3VudGEuY29tIiwieC1oYXN1cmEtdXNlci1pZCI6IjU3MmFkMWMwLWY5N2ItNGUxNi1iMWY2LThiNWNhOTBmOTMxZiIsIngtaGFzdXJhLXVzZXItaXMtYW5vbnltb3VzIjoiZmFsc2UifSwiaWF0IjoxNzMzNjk1MTEzLCJpc3MiOiJoYXN1cmEtYXV0aCIsInN1YiI6IjU3MmFkMWMwLWY5N2ItNGUxNi1iMWY2LThiNWNhOTBmOTMxZiJ9.83vQQ3PKvhl7XJQndDI1-ZoiJbGPLEMx5oYUCcD9Hf8\",\n        \"accessTokenExpiresIn\": 900,\n        \"refreshToken\": \"5ede6c06-8281-45a0-9a31-4b58f5babf4e\",\n        \"refreshTokenId\": \"df7a1bee-ddb0-4806-b77c-2a68aaedd4c4\",\n        \"user\": {\n            \"avatarUrl\": \"https://www.gravatar.com/avatar/1c874909e198bf87d38b50ef7e4d3163?d=mp\u0026r=g\",\n            \"createdAt\": \"2024-12-02T03:17:53.317046Z\",\n            \"defaultRole\": \"org:member\",\n            \"displayName\": \"John Smith\",\n            \"email\": \"john.smith@chinthagunta.com\",\n            \"emailVerified\": false,\n            \"id\": \"572ad1c0-f97b-4e16-b1f6-8b5ca90f931f\",\n            \"isAnonymous\": false,\n            \"locale\": \"en\",\n            \"metadata\": {},\n            \"phoneNumberVerified\": false,\n            \"roles\": [\n                \"user\",\n                \"me\",\n                \"org:member\"\n            ]\n        }\n    }\n}\n```\n\n```json\n{\n  \"exp\": 1733696013,\n  \"https://hasura.io/jwt/claims\": {\n    \"x-hasura-allowed-roles\": [\n      \"user\",\n      \"me\",\n      \"org:member\"\n    ],\n    \"x-hasura-default-role\": \"org:member\",\n    \"x-hasura-org-id\": \"d5dbb6b6-5e43-4dca-b855-be9b65b6695b\",\n    \"x-hasura-org-ids\": \"{\\\"8dfd9a31-de01-47be-92a7-ba1c720c6270\\\",\\\"d5dbb6b6-5e43-4dca-b855-be9b65b6695b\\\"}\",\n    \"x-hasura-user-email\": \"john.smith@chinthagunta.com\",\n    \"x-hasura-user-id\": \"572ad1c0-f97b-4e16-b1f6-8b5ca90f931f\",\n    \"x-hasura-user-is-anonymous\": \"false\"\n  },\n  \"iat\": 1733695113,\n  \"iss\": \"hasura-auth\",\n  \"sub\": \"572ad1c0-f97b-4e16-b1f6-8b5ca90f931f\"\n}\n```\n\n## Hasura Auth Custom\n\n```shell\ndocker tag nhost/hasura-auth:0.36.1-sumo ghcr.io/xmlking/nhost-multi-tenancy-experiment/hasura-auth:0.36.1-sumo\ndocker push ghcr.io/xmlking/nhost-multi-tenancy-experiment/hasura-auth:0.36.1-sumo\n```\n\n### Export Seeds\n\n```shell\nhasura seed create 001_roles --database-name default --from-table auth.roles --endpoint https://local.hasura.local.nhost.run --admin-secret hasura-admin-secret\nhasura seed create 002_users --database-name default --from-table auth.users --endpoint https://local.hasura.local.nhost.run --admin-secret hasura-admin-secret\nhasura seed create 003_user_roles --database-name default --from-table auth.user_roles --endpoint https://local.hasura.local.nhost.run --admin-secret hasura-admin-secret\nhasura seed create 004_organizations --database-name default --from-table public.organizations --endpoint https://local.hasura.local.nhost.run --admin-secret hasura-admin-secret\nhasura seed create 005_user_org_roles --database-name default --from-table public.user_org_roles --endpoint https://local.hasura.local.nhost.run --admin-secret hasura-admin-secret\nhasura seed create 007_groups --database-name default --from-table public.groups --endpoint https://local.hasura.local.nhost.run --admin-secret hasura-admin-secret\nhasura seed create 008_user_groups --database-name default --from-table public.user_groups --endpoint https://local.hasura.local.nhost.run --admin-secret hasura-admin-secret\n```\n\n## Schema\n\n![diagram.png](diagram.png)\n\n## Limitations\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxmlking%2Fnhost-multi-tenancy-experiment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxmlking%2Fnhost-multi-tenancy-experiment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxmlking%2Fnhost-multi-tenancy-experiment/lists"}