Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: members, member roles and permissions #6384

Merged
merged 9 commits into from
Jan 30, 2025
Merged

Conversation

n1ru4l
Copy link
Contributor

@n1ru4l n1ru4l commented Jan 17, 2025

Background

Follow up for #6231

Description

Moves the member and permissions documentation to a dedicated page.

TODO:

  • document resource assignments
  • product update

Checklist

  • Input validation
  • Output encoding
  • Authentication management
  • Session management
  • Access control
  • Cryptographic practices
  • Error handling and logging
  • Data protection
  • Communication security
  • System configuration
  • Database security
  • File management
  • Memory management
  • Testing

Copy link
Contributor

github-actions bot commented Jan 17, 2025

🚀 Snapshot Release (alpha)

The latest changes of this PR are available as alpha on npm (based on the declared changesets):

Package Version Info
hive 5.0.0-alpha-20250130103353-a7662fd5e39f3a66714f2eae1aaea35e57f08f5d npm ↗︎ unpkg ↗︎

Copy link
Contributor

github-actions bot commented Jan 17, 2025

💻 Website Preview

The latest changes are available as preview in: https://6ceda81f.hive-landing-page.pages.dev

Copy link
Contributor

github-actions bot commented Jan 17, 2025

🐋 This PR was built and pushed to the following Docker images:

Targets: build

Platforms: linux/amd64

Image Tag: a7662fd5e39f3a66714f2eae1aaea35e57f08f5d

Docker Bake metadata
{
"app": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/api/health",
          "build-arg:IMAGE_DESCRIPTION": "The app of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/app",
          "build-arg:PORT": "3000",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/app",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/vw7hev8iudtli9s77hyf7i9lj",
  "containerimage.config.digest": "sha256:17ab622dce0b94d41444cc86f16134219fb32b95d498ed05e44087390ee40224",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:bdbf2d083f6b4a6ec0e3fc601baa5f0442a3968794e572ff95072aa2d44f8d86",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:bdbf2d083f6b4a6ec0e3fc601baa5f0442a3968794e572ff95072aa2d44f8d86",
  "image.name": "ghcr.io/graphql-hive/app:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/app:docs_permission_member_roles-amd64"
},
"buildx.build.warnings": [
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIyKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 22
        },
        "end": {
          "line": 22
        }
      }
    ]
  },
  {
    "vertex": "sha256:ede17860405d8da497d87b2329177e32208c18f9e8ac1cff4b728a0061858725",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9USVRMRScgKGxpbmUgMTUp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 15
        },
        "end": {
          "line": 15
        }
      }
    ]
  },
  {
    "vertex": "sha256:ede17860405d8da497d87b2329177e32208c18f9e8ac1cff4b728a0061858725",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9ERVNDUklQVElPTicgKGxpbmUgMTcp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 17
        },
        "end": {
          "line": 17
        }
      }
    ]
  },
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIxKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 21
        },
        "end": {
          "line": 21
        }
      }
    ]
  },
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRQT1JUJyAobGluZSAyMik=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 22
        },
        "end": {
          "line": 22
        }
      }
    ]
  },
  {
    "vertex": "sha256:ede17860405d8da497d87b2329177e32208c18f9e8ac1cff4b728a0061858725",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDEyKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 12
        },
        "end": {
          "line": 12
        }
      }
    ]
  },
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAyMSk=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 21
        },
        "end": {
          "line": 21
        }
      }
    ]
  },
  {
    "vertex": "sha256:ede17860405d8da497d87b2329177e32208c18f9e8ac1cff4b728a0061858725",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDEwKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 10
        },
        "end": {
          "line": 10
        }
      }
    ]
  },
  {
    "vertex": "sha256:ede17860405d8da497d87b2329177e32208c18f9e8ac1cff4b728a0061858725",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDExKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 11
        },
        "end": {
          "line": 11
        }
      }
    ]
  },
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9USVRMRScgKGxpbmUgMTIp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 12
        },
        "end": {
          "line": 12
        }
      }
    ]
  },
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIwKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 20
        },
        "end": {
          "line": 20
        }
      }
    ]
  },
  {
    "vertex": "sha256:ede17860405d8da497d87b2329177e32208c18f9e8ac1cff4b728a0061858725",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAxMik=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 12
        },
        "end": {
          "line": 12
        }
      }
    ]
  },
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAxMyk=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 13
        },
        "end": {
          "line": 13
        }
      }
    ]
  },
  {
    "vertex": "sha256:28aa54bfdc3fe7e05db5e9d3f13290a2f959d1c15e183e755e80f3b748b59fe8",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9ERVNDUklQVElPTicgKGxpbmUgMTQp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 14
        },
        "end": {
          "line": 14
        }
      }
    ]
  }
],
"composition-federation-2": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "Federation 2 Composition Service for GraphQL Hive.",
          "build-arg:IMAGE_TITLE": "graphql-hive/composition-federation-2",
          "build-arg:PORT": "3069",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/external-composition",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/7z50i68c8xbavxnch7p6mn4rd",
  "containerimage.config.digest": "sha256:884a4751d8452cda86833336394ecb944deb1c25b8217efee78ea4d7bf658ac6",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:d42c4555f46179cfa497e32d85876606b368968c95ddd8962577e4775948c7a4",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:d42c4555f46179cfa497e32d85876606b368968c95ddd8962577e4775948c7a4",
  "image.name": "ghcr.io/graphql-hive/composition-federation-2:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/composition-federation-2:docs_permission_member_roles-amd64"
},
"emails": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The emails service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/emails",
          "build-arg:PORT": "3006",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/emails",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/pra60hybtnd1mu41m9q12c6fo",
  "containerimage.config.digest": "sha256:1a35009b5fcc1cfba853e5bfb297bb33c436b6881f7fa6c61d7c5e0790ae51e5",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:d08fec607a0c0ab8c02d125aba9b97d1e3a705563353c3b508290f54208c488c",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:d08fec607a0c0ab8c02d125aba9b97d1e3a705563353c3b508290f54208c488c",
  "image.name": "ghcr.io/graphql-hive/emails:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/emails:docs_permission_member_roles-amd64"
},
"policy": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The policy service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/policy",
          "build-arg:PORT": "3012",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/policy",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/rvgkchwgc11hyp2stsfdwvqqg",
  "containerimage.config.digest": "sha256:d7f12d45117a0dbd96d105af509f94a7d0a253a09f500c86e38f2d2b578f83c7",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:f331922a1dbccd406d816684407d32cc750a205d0c9f05291e0c1f8adfb45676",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:f331922a1dbccd406d816684407d32cc750a205d0c9f05291e0c1f8adfb45676",
  "image.name": "ghcr.io/graphql-hive/policy:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/policy:docs_permission_member_roles-amd64"
},
"rate-limit": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The rate limit service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/rate-limit",
          "build-arg:PORT": "3009",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/rate-limit",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/9nqvse0a5ocloqr7zlik8ol3o",
  "containerimage.config.digest": "sha256:58a2e298855dfc8b1b45dbd82b26e972b73a542bb9f13ced1283ae045af4fba2",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:9845782ccf17a606b28d0a163bc6b9699bae94cf2ed0d71e1d510a12c04bf9eb",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:9845782ccf17a606b28d0a163bc6b9699bae94cf2ed0d71e1d510a12c04bf9eb",
  "image.name": "ghcr.io/graphql-hive/rate-limit:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/rate-limit:docs_permission_member_roles-amd64"
},
"schema": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The schema service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/schema",
          "build-arg:PORT": "3002",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/schema",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/8d85yvs5c9i7f1smuqvwgvd6w",
  "containerimage.config.digest": "sha256:1e16e5fe6906c4fc0886c3cbea32f19a582191ad85548e1deb5916e9522708aa",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:60120ce8e2db1c14d96a9ff6cbfdf6f49dea7d74c068cdacf8494cb962bd2949",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:60120ce8e2db1c14d96a9ff6cbfdf6f49dea7d74c068cdacf8494cb962bd2949",
  "image.name": "ghcr.io/graphql-hive/schema:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/schema:docs_permission_member_roles-amd64"
},
"server": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The server service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/server",
          "build-arg:PORT": "3001",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/server",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/jlrexivwf6rh2aw1hcutngn3o",
  "containerimage.config.digest": "sha256:d28474de0e8543147ee894a0abe286ea6b01cc3d869ee88847b8c00fd9903d65",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:485ef5eff907442fa38ed63e9376977e082fa81b1323d54516752e04861d49e9",
    "size": 2076,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:485ef5eff907442fa38ed63e9376977e082fa81b1323d54516752e04861d49e9",
  "image.name": "ghcr.io/graphql-hive/server:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/server:docs_permission_member_roles-amd64"
},
"storage": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "migrations.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:IMAGE_DESCRIPTION": "The migrations service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/storage",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/m3gsm83i23gidmwme5mjbh75p",
  "containerimage.config.digest": "sha256:4a17dff6cb3709778efb1dd29de59715905dadf809e3d00185429b8e38852879",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:0a054eb8e6f70ef1855c6117385002d1adc9f812ecd9a0081ba4d82b6e7209ac",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:0a054eb8e6f70ef1855c6117385002d1adc9f812ecd9a0081ba4d82b6e7209ac",
  "image.name": "ghcr.io/graphql-hive/storage:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/storage:docs_permission_member_roles-amd64"
},
"stripe-billing": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The stripe billing service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/stripe-billing",
          "build-arg:PORT": "3010",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/stripe-billing",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/qf7i18ag8sngzjyvb0lizopou",
  "containerimage.config.digest": "sha256:3bce486660618b4278df004052db52ff3e5f536cdb1271ef519b5c6c6c23143e",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:14eaa7e8cff9338a95db1bd935229dad03701e11cb247b20976f16d3bf1be1be",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:14eaa7e8cff9338a95db1bd935229dad03701e11cb247b20976f16d3bf1be1be",
  "image.name": "ghcr.io/graphql-hive/stripe-billing:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/stripe-billing:docs_permission_member_roles-amd64"
},
"tokens": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The tokens service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/tokens",
          "build-arg:PORT": "3003",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/tokens",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/kbvvzer06s3465gq26v073cfs",
  "containerimage.config.digest": "sha256:f616c50073b8e7c6816e29e5962287c85cdf0b65f5a8499bb5e05262ab051700",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:6c8510941059a0a32469fc5ce6d82d7e26574f37f7ce133e2bfd7f60b83ee500",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:6c8510941059a0a32469fc5ce6d82d7e26574f37f7ce133e2bfd7f60b83ee500",
  "image.name": "ghcr.io/graphql-hive/tokens:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/tokens:docs_permission_member_roles-amd64"
},
"usage": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The usage ingestor service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/usage",
          "build-arg:PORT": "3006",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/usage",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/1gasf64vskr2elyxv74u3ejow",
  "containerimage.config.digest": "sha256:7b32e4b110e369ad121aafaeaa65d60506f615753a32a04adb3c69d19ddd1d00",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:6950876b83e643cc8f943d14e925953ccb7f2931d9318121ec9fe1f0a2152c06",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:6950876b83e643cc8f943d14e925953ccb7f2931d9318121ec9fe1f0a2152c06",
  "image.name": "ghcr.io/graphql-hive/usage:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/usage:docs_permission_member_roles-amd64"
},
"usage-estimator": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The usage estimator service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/usage-estimator",
          "build-arg:PORT": "3008",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/usage-estimator",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/k05ioxfsw31q57jopbzc2n7hz",
  "containerimage.config.digest": "sha256:809f5d24a93142ed9d8d47e532449f6ad17e03875aa5db2b3619e9b098d762e4",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:ff70d928dc935d13f6343edc183cc95787010c1162605e1d877ceba65e4ef31d",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:ff70d928dc935d13f6343edc183cc95787010c1162605e1d877ceba65e4ef31d",
  "image.name": "ghcr.io/graphql-hive/usage-estimator:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/usage-estimator:docs_permission_member_roles-amd64"
},
"usage-ingestor": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The usage ingestor service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/usage-ingestor",
          "build-arg:PORT": "3007",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/usage-ingestor",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/qtafst3r57omues02podfrc46",
  "containerimage.config.digest": "sha256:bd6f9f4af7a5714bbbf71a2e65d5d9e6a663de8ff22df5f3e994ea2c37127514",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:018979d5817989cd4ca0b3832c21a25642f7e4e8d65d6cf166f51e43e2aa860e",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:018979d5817989cd4ca0b3832c21a25642f7e4e8d65d6cf166f51e43e2aa860e",
  "image.name": "ghcr.io/graphql-hive/usage-ingestor:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/usage-ingestor:docs_permission_member_roles-amd64"
},
"webhooks": {
  "buildx.build.provenance": {
    "buildType": "https://mobyproject.org/buildkit@v1",
    "materials": [
      {
        "uri": "pkg:docker/node@22.13.0-slim?platform=linux%2Famd64",
        "digest": {
          "sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
        }
      }
    ],
    "invocation": {
      "configSource": {
        "entryPoint": "services.dockerfile"
      },
      "parameters": {
        "frontend": "dockerfile.v0",
        "args": {
          "build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
          "build-arg:IMAGE_DESCRIPTION": "The webhooks ingestor service of the GraphQL Hive project.",
          "build-arg:IMAGE_TITLE": "graphql-hive/webhooks",
          "build-arg:PORT": "3005",
          "build-arg:RELEASE": "a7662fd5e39f3a66714f2eae1aaea35e57f08f5d",
          "build-arg:SERVICE_DIR_NAME": "@hive/webhooks",
          "context:dist": "local:dist",
          "context:shared": "local:shared",
          "frontend.caps": "moby.buildkit.frontend.contexts+forward",
          "local-sessionid:context": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:dockerfile": "x0a5tvi7jrtboohov4j69kvy1",
          "local-sessionid:shared": "x0a5tvi7jrtboohov4j69kvy1"
        },
        "locals": [
          {
            "name": "context"
          },
          {
            "name": "dist"
          },
          {
            "name": "dockerfile"
          },
          {
            "name": "shared"
          }
        ]
      },
      "environment": {
        "platform": "linux/amd64"
      }
    }
  },
  "buildx.build.ref": "builder-2dd0cffb-02ac-461b-8390-3f0aa3baae64/builder-2dd0cffb-02ac-461b-8390-3f0aa3baae640/cbdimhxjgckv8s8w9i157ctwj",
  "containerimage.config.digest": "sha256:4dfd805ac06fbe55e04e4670c96dfd08bb2403670a67e5a0333b8be6e86645dd",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "digest": "sha256:5400f2c3871ec7883a45a02141cd87b2a91baae817ad8c9c2dcf523e4f013784",
    "size": 2075,
    "platform": {
      "architecture": "amd64",
      "os": "linux"
    }
  },
  "containerimage.digest": "sha256:5400f2c3871ec7883a45a02141cd87b2a91baae817ad8c9c2dcf523e4f013784",
  "image.name": "ghcr.io/graphql-hive/webhooks:a7662fd5e39f3a66714f2eae1aaea35e57f08f5d-amd64,ghcr.io/graphql-hive/webhooks:docs_permission_member_roles-amd64"
}
}

@jasonkuhrt
Copy link
Member

IIUC this documentation is tightly coupled to #6231. What is our motivation for shipping them separately?

@n1ru4l n1ru4l requested a review from kamilkisiela January 20, 2025 10:16
@kamilkisiela
Copy link
Contributor

In the screenshots where a textarea is rendered, I can see Gramarly, but other than that, good.

Copy link
Collaborator

@jdolle jdolle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that you moved this to its own section and love how many reference images were provided.


Choose a name and a description for your new role. Then select the permissions for that role.

Some permissions depend on each other. E.g. you can not allow deleting a project without granting
Copy link
Collaborator

@jdolle jdolle Jan 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is outside the scope of documentation, but I'm not sure if we should enforce this. I think delete without read could be valid but might just not be as practical for the member who does the deleting. I.e. they could still call the delete API but couldnt see what they are deleting.
I think this decoupling is beneficial by simplifying our checks and the UI.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So far this documentation is Dashboard UI facing, and there you cannot delete a project without seeing that.
I think what you are referring to is more relevant for permissions for API access tokens.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it the case that checking off "project:delete" would force-check "project:view"? If not, I'm not sure this needs to be mentioned?

If it is, I'm still not sure it needs to be mentioned. Perhaps it can be viewed as a detail with explanation left to e.g. in-situ tooltip.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can not check project:delete unless you first check project:view. If you uncheck project:delete, project:view remains checked.

We already have information about this in the app, I don't think being a bit redundant here hurts
image

Copy link
Member

@jasonkuhrt jasonkuhrt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks thorough! I didn't read it all, but spot checked a few things and dropped comments fwiw.

In regards to manual screenshots for documentation, I generally have mixed feelings about their effort to value ratio, but I wouldn't say I have an informed view or anything, just gut reaction. If we've found this approach useful to date, great!

packages/web/docs/src/pages/docs/management/_meta.ts Outdated Show resolved Hide resolved

Hive provides two predefined roles for convenience.

Alternatively, organization owners or members with specific permissions can create and/or assign
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Alternatively, organization owners or members with specific permissions can create and/or assign
Alternatively, organization owners (or members with sufficient permissions) can create and/or assign

Comment on lines 5 to 6
A Hive organization can have an unlimited number of members. Member actions are allowed or
explicitly denied using roles, which are named collections of permissions.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A Hive organization can have an unlimited number of members. Member actions are allowed or
explicitly denied using roles, which are named collections of permissions.
A Hive organization is allowed an unlimited number of members. Members are users with a role in the organization. Roles are organization-defined named sets of policies. A policy is a grant or denial of authorization to perform a certain action against a certain set resources in the organization.

I am slightly concerned about how the term "permission" may impede intuitive learning of our system. For example a phrase like "Do you have permission for that?" has the sense that presence of permission equals granted access. But that's not how our system works. A role's set of "permissions" can either grant or deny. Thus, my suggestion above looks for a different term for the constituent part of a role. So far the best term I can think of is "policy".

className="mt-8 rounded-lg drop-shadow-md"
/>

## Member Roles
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we ever talk about the concept of roles apart from the concept of organization members? If not, I wonder if we can elide the verbosity of prefixing members here and elsewhere.


Choose a name and a description for your new role. Then select the permissions for that role.

Some permissions depend on each other. E.g. you can not allow deleting a project without granting
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it the case that checking off "project:delete" would force-check "project:view"? If not, I'm not sure this needs to be mentioned?

If it is, I'm still not sure it needs to be mentioned. Perhaps it can be viewed as a detail with explanation left to e.g. in-situ tooltip.

@n1ru4l n1ru4l force-pushed the docs-permission-member-roles branch from 4725c80 to 6caa49c Compare January 29, 2025 15:17
@n1ru4l n1ru4l marked this pull request as ready for review January 29, 2025 15:54
Copy link

coderabbitai bot commented Jan 29, 2025

📝 Walkthrough

Summary by CodeRabbit

  • Documentation

    • Added comprehensive documentation for Members, Roles, and Permissions
    • Updated documentation for organization management
    • Introduced new product update page explaining the new permission system
  • New Features

    • Implemented a more granular role-based access control (RBAC) system
    • Enhanced permissions management for organization members
  • Breaking Changes

    • Modified default Viewer role permissions
    • Restricted ability to create targets and projects for non-admin roles
    • Changed role management and permission assignment processes

Walkthrough

The changes involve updating the documentation related to managing members, roles, and permissions within a Hive organization. This includes modifications to the _meta.ts file to enhance navigation clarity, the addition of a new documentation file detailing member roles and permissions management, and the removal of a section on organization management from the organizations.mdx file. Additionally, a new permissions system has been introduced, replacing existing scopes with a role-based access control (RBAC) system, which allows for more granular permission assignments.

Changes

File Change Summary
packages/web/docs/src/content/management/_meta.ts - Added new key 'members-roles-permissions' with value 'Members, Roles, and Permissions'
- Updated 'sso-oidc-provider' description to 'Single Sign On (Okta, Entra ID)'
packages/web/docs/src/content/management/members-roles-permissions.mdx - Added new documentation file explaining member roles, permissions, and management processes
packages/web/docs/src/content/management/organizations.mdx - Removed section on "Manage existing organization," including details about members and roles
.changeset/tall-islands-occur.md - Introduced a new permissions system for organization member roles, emphasizing breaking changes and clarifications on role management
packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx - Documented the new permissions system and role-based access control, including metadata updates

Sequence Diagram

sequenceDiagram
    participant User
    participant Dashboard
    participant Organization
    participant Roles

    User->>Dashboard: Access Organization Management
    Dashboard->>Organization: View Members
    Dashboard->>Roles: List Available Roles
    User->>Dashboard: Invite New Member
    Dashboard->>Organization: Add Member
    User->>Dashboard: Assign Role to Member
    Dashboard->>Roles: Set Permissions
    Dashboard->>Organization: Update Member Role
Loading

This sequence diagram illustrates the high-level workflow of managing members and roles within the Hive organization dashboard, showing the interactions between the user, dashboard, organization, and roles.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2c78b75 and a7662fd.

📒 Files selected for processing (1)
  • packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
packages/web/docs/src/content/management/members-roles-permissions.mdx (1)

237-240: Improve clarity of permissions hierarchy explanation.

The explanation of permissions hierarchy could be clearer:

  • Missing article "The" before "grants"
  • Sentence structure could be improved

Apply this diff:

-The grants follow the hierachical order of resources within Hive. Permissions on the organization
-level are always granted, these can only be restricted by the permissions defined in the member
-role.
+The grants follow the hierarchical order of resources within Hive. Permissions at the organization
+level are always granted and can only be restricted by the permissions defined in the member
+role.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~237-~237: Possible missing article found.
Context: ...e hierachical order of resources within Hive. Permissions on the organization level ...

(AI_HYDRA_LEO_MISSING_THE)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c29d3c5 and 80c8c3b.

⛔ Files ignored due to path filters (12)
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/assign-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/assign-role-02-overview.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/assign-role-03-granular-access-service.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-02-wizard.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-03-confirm.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-04-success.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/delete-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/delete-role-02-confirm.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/members-tab.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/update-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/update-role-02-editor.png is excluded by !**/*.png
📒 Files selected for processing (3)
  • packages/web/docs/src/content/management/_meta.ts (1 hunks)
  • packages/web/docs/src/content/management/members-roles-permissions.mdx (1 hunks)
  • packages/web/docs/src/content/management/organizations.mdx (0 hunks)
💤 Files with no reviewable changes (1)
  • packages/web/docs/src/content/management/organizations.mdx
🧰 Additional context used
📓 Path-based instructions (2)
packages/web/docs/src/content/management/_meta.ts (1)

Pattern packages/web/docs/**: The main landing page and documentation website. It's built using TypeScript, Tailwind, NextJS and Nextra.

In PRs that adds a new feature to the product, we would like to make sure that the PR includes the following:

  • Up to date documentation in packages/web/docs/src/content
  • A product update in packages/web/docs/src/app/product-updates
packages/web/docs/src/content/management/members-roles-permissions.mdx (1)

Pattern packages/web/docs/**: The main landing page and documentation website. It's built using TypeScript, Tailwind, NextJS and Nextra.

In PRs that adds a new feature to the product, we would like to make sure that the PR includes the following:

  • Up to date documentation in packages/web/docs/src/content
  • A product update in packages/web/docs/src/app/product-updates
🪛 LanguageTool
packages/web/docs/src/content/management/members-roles-permissions.mdx

[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[uncategorized] ~51-~51: Possible missing comma found.
Context: ... Instead of using the predefined member roles you can create your own member roles. M...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[uncategorized] ~206-~206: Possible missing comma found.
Context: ...gned a role. For changing the assigned role click the change button. import assi...

(AI_HYDRA_LEO_MISSING_COMMA)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)


[uncategorized] ~237-~237: Possible missing article found.
Context: ...e hierachical order of resources within Hive. Permissions on the organization level ...

(AI_HYDRA_LEO_MISSING_THE)


[uncategorized] ~307-~307: Possible missing preposition found.
Context: ...ncluded within the selection. In order assign resources, select Granular Access wit...

(AI_HYDRA_LEO_MISSING_TO)

🔇 Additional comments (2)
packages/web/docs/src/content/management/_meta.ts (1)

3-4: LGTM! Clear and descriptive navigation labels.

The changes improve discoverability by:

  • Adding a dedicated section for members documentation
  • Making the SSO description more specific by mentioning supported providers (Okta, Entra ID)
packages/web/docs/src/content/management/members-roles-permissions.mdx (1)

1-319: Overall documentation structure and content is excellent!

The documentation is well-structured, comprehensive, and includes helpful visual aids. It effectively covers:

  • Member roles and permissions overview
  • Role management (creating, updating, deleting)
  • Member management (inviting, assigning roles)
  • Resource access restrictions

Minor grammatical improvements have been suggested above, but the content organization and depth are excellent.

🧰 Tools
🪛 LanguageTool

[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[uncategorized] ~51-~51: Possible missing comma found.
Context: ... Instead of using the predefined member roles you can create your own member roles. M...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[uncategorized] ~206-~206: Possible missing comma found.
Context: ...gned a role. For changing the assigned role click the change button. import assi...

(AI_HYDRA_LEO_MISSING_COMMA)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)


[uncategorized] ~237-~237: Possible missing article found.
Context: ...e hierachical order of resources within Hive. Permissions on the organization level ...

(AI_HYDRA_LEO_MISSING_THE)


[uncategorized] ~307-~307: Possible missing preposition found.
Context: ...ncluded within the selection. In order assign resources, select Granular Access wit...

(AI_HYDRA_LEO_MISSING_TO)

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (4)
packages/web/docs/src/content/management/members-roles-permissions.mdx (4)

6-7: Improve clarity in the introduction.

Consider rephrasing for better clarity and emphasis on the relationship between members and roles.

-A Hive organization can have an unlimited number of members. Member actions are allowed or
-explicitly denied using roles, which are named collections of permissions.
+A Hive organization can have an unlimited number of members. Each member's actions are controlled
+through roles, which are named collections of permissions that explicitly allow or deny access.

227-228: Fix grammatical error in confirmation step.

The sentence has grammatical issues.

-Confirm the selecton by via the `Assign role to user` button.
+Confirm the selection by clicking the `Assign role to user` button.

307-309: Fix missing preposition in resource assignment instruction.

The sentence is missing the preposition "to".

-In order assign resources, select `Granular Access` within the `Assigned Resources` section, then
-assign your resources (projects, targets, services) as desired.
+In order to assign resources, select `Granular Access` within the `Assigned Resources` section, then
+assign your resources (projects, targets, services) as desired.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~307-~307: Possible missing preposition found.
Context: ...ncluded within the selection. In order assign resources, select Granular Access wit...

(AI_HYDRA_LEO_MISSING_TO)


231-236: Improve clarity in resource restriction explanation.

The explanation of resource restriction could be clearer.

-Sometimes you might want to restrict a organization member to only being able to access a specific
-project, or only approve failed schema checks of a set of services.
-
-When assigning a role to an organization member, you can specify on which resources the permissions
-granted by the member role should apply.
+Sometimes you might want to restrict an organization member's access to specific resources, such as:
+- Limiting access to a particular project
+- Allowing schema check approvals only for specific services
+
+When assigning a role to an organization member, you can specify which resources the role's
+permissions should apply to.
🧰 Tools
🪛 LanguageTool

[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 80c8c3b and 75880a6.

📒 Files selected for processing (1)
  • packages/web/docs/src/content/management/members-roles-permissions.mdx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
packages/web/docs/src/content/management/members-roles-permissions.mdx (1)

Pattern packages/web/docs/**: The main landing page and documentation website. It's built using TypeScript, Tailwind, NextJS and Nextra.

In PRs that adds a new feature to the product, we would like to make sure that the PR includes the following:

  • Up to date documentation in packages/web/docs/src/content
  • A product update in packages/web/docs/src/app/product-updates
🪛 LanguageTool
packages/web/docs/src/content/management/members-roles-permissions.mdx

[grammar] ~17-~17: Possible verb agreement error. Did you mean “limits”? (Some collective nouns can be treated as both singular and plural, so ‘Limit’ is not always incorrect.)
Context: ...cess to projects for a group of users - Limit who can approve a breaking change for a...

(COLLECTIVE_NOUN_VERB_AGREEMENT_VBP)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[uncategorized] ~206-~206: Possible missing comma found.
Context: ...gned a role. For changing the assigned role click the change button. import assi...

(AI_HYDRA_LEO_MISSING_COMMA)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)


[uncategorized] ~307-~307: Possible missing preposition found.
Context: ...ncluded within the selection. In order assign resources, select Granular Access wit...

(AI_HYDRA_LEO_MISSING_TO)

🔇 Additional comments (2)
packages/web/docs/src/content/management/members-roles-permissions.mdx (2)

21-32: LGTM! Clear and well-structured section.

The section effectively guides users to the Members section in the Hive Dashboard with appropriate visual aids.


1-319: Well-structured and comprehensive documentation!

The documentation effectively covers all aspects of member and role management with clear explanations and helpful visual aids. The use of diagrams for explaining resource hierarchies and access patterns is particularly effective.

🧰 Tools
🪛 LanguageTool

[grammar] ~17-~17: Possible verb agreement error. Did you mean “limits”? (Some collective nouns can be treated as both singular and plural, so ‘Limit’ is not always incorrect.)
Context: ...cess to projects for a group of users - Limit who can approve a breaking change for a...

(COLLECTIVE_NOUN_VERB_AGREEMENT_VBP)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[uncategorized] ~206-~206: Possible missing comma found.
Context: ...gned a role. For changing the assigned role click the change button. import assi...

(AI_HYDRA_LEO_MISSING_COMMA)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)


[uncategorized] ~307-~307: Possible missing preposition found.
Context: ...ncluded within the selection. In order assign resources, select Granular Access wit...

(AI_HYDRA_LEO_MISSING_TO)

Comment on lines 96 to 100
<NextImage
alt="Member Role Creator - Permission Overview"
src={createRole03ConfirmImage}
className="mt-8 rounded-lg drop-shadow-md"
/>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix incorrect image reference.

The success state is using the wrong image reference.

-  src={createRole03ConfirmImage}
+  src={createRole04SuccessImage}

Committable suggestion skipped: line range outside the PR's diff.

@n1ru4l n1ru4l force-pushed the docs-permission-member-roles branch from 75880a6 to 1707975 Compare January 30, 2025 09:53
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
packages/web/docs/src/content/management/members-roles-permissions.mdx (4)

128-128: Add missing comma for better readability.

Add a comma after "After that" to improve sentence structure.

-After that the permissions for the role are updated.
+After that, the permissions for the role are updated.

42-42: Use consistent "cannot" throughout the document.

Replace "can not" with "cannot" for consistency in formal writing.

-permissions can not be added or removed.
+permissions cannot be added or removed.

-you can not allow deleting a project
+you cannot allow deleting a project

Also applies to: 74-74

🧰 Tools
🪛 LanguageTool

[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


88-88: Add hyphen to "double-check".

The compound verb "double-check" should be hyphenated.

-Here you, can double check your selection
+Here you, can double-check your selection
🧰 Tools
🪛 LanguageTool

[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


92-92: Use consistent articles before "organization".

Use "an" instead of "a" before "organization" throughout the document.

-to a organization member
+to an organization member

-By default a organization member
+By default an organization member

-restrict a organization member
+restrict an organization member

Also applies to: 199-199, 231-231

🧰 Tools
🪛 LanguageTool

[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 75880a6 and 1707975.

⛔ Files ignored due to path filters (12)
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/assign-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/assign-role-02-overview.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/assign-role-03-granular-access-service.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-02-wizard.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-03-confirm.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/create-role-04-success.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/delete-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/delete-role-02-confirm.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/members-tab.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/update-role-01-start.png is excluded by !**/*.png
  • packages/web/docs/public/docs/pages/management/members-roles-permissions/update-role-02-editor.png is excluded by !**/*.png
📒 Files selected for processing (3)
  • packages/web/docs/src/content/management/_meta.ts (1 hunks)
  • packages/web/docs/src/content/management/members-roles-permissions.mdx (1 hunks)
  • packages/web/docs/src/content/management/organizations.mdx (0 hunks)
💤 Files with no reviewable changes (1)
  • packages/web/docs/src/content/management/organizations.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/web/docs/src/content/management/_meta.ts
🧰 Additional context used
📓 Path-based instructions (1)
packages/web/docs/src/content/management/members-roles-permissions.mdx (1)

Pattern packages/web/docs/**: The main landing page and documentation website. It's built using TypeScript, Tailwind, NextJS and Nextra.

In PRs that adds a new feature to the product, we would like to make sure that the PR includes the following:

  • Up to date documentation in packages/web/docs/src/content
  • A product update in packages/web/docs/src/app/product-updates
🪛 LanguageTool
packages/web/docs/src/content/management/members-roles-permissions.mdx

[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)

🔇 Additional comments (5)
packages/web/docs/src/content/management/members-roles-permissions.mdx (5)

13-14: Fix typos in the introduction.

There are several typos in this paragraph:

  • "assinging" should be "assigning"
  • "an user" should be "a user"
  • "permissionsgranted" should be "permissions granted"
-When assinging a role to an user, the permissionsgranted by that role can be restricted to a set of
+When assigning a role to a user, the permissions granted by that role can be restricted to a set of
🧰 Tools
🪛 LanguageTool

[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


16-17: Fix typo in bullet point.

The first bullet point has incorrect grammar:

  • "Fully or partially access to projects" is incorrect
-Fully or partially access to projects to a group of users
+Full or partial access to projects for a group of users

96-100: Fix incorrect image reference.

The success state is using the wrong image reference.

-  src={createRole03ConfirmImage}
+  src={createRole04SuccessImage}

304-305: Fix typos in granular access section.

There is a typo in this paragraph:

  • "grnular" should be "granular"
-When selecting grnular access for a project, you can further specify which targets and which
+When selecting granular access for a project, you can further specify which targets and which

1-319: Well-structured and comprehensive documentation!

The documentation is logically organized with clear sections, helpful visual aids, and good use of examples and flowcharts. The hierarchy of permissions and resource access is well explained.

🧰 Tools
🪛 LanguageTool

[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx (1)

36-36: Use Next.js Link component for internal navigation.

For internal navigation, use the Next.js Link component instead of a regular markdown link to enable client-side navigation.

-[Learn more in the updated documentation](/docs/management/members-roles-permissions)
+import Link from 'next/link'
+
+<Link href="/docs/management/members-roles-permissions">Learn more in the updated documentation</Link>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1707975 and e8820e0.

⛔ Files ignored due to path filters (2)
  • packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/member-role-assigner.png is excluded by !**/*.png
  • packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/member-role-editor.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • .changeset/tall-islands-occur.md (1 hunks)
  • packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
.changeset/tall-islands-occur.md (1)

Pattern .changeset/**: A special folder with the files created/managed by Changesets tool.
In PRs that already includes this file, please make sure that the content of the markdown file includes:

  • Full description of the change
  • A link to the relevant GitHub issues (if any)
  • Example with before/after
  • If the change is of type major, please ensure that the content have content about migration with before/after.
packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx (1)

Pattern packages/web/docs/**: The main landing page and documentation website. It's built using TypeScript, Tailwind, NextJS and Nextra.

In PRs that adds a new feature to the product, we would like to make sure that the PR includes the following:

  • Up to date documentation in packages/web/docs/src/content
  • A product update in packages/web/docs/src/app/product-updates

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (7)
packages/web/docs/src/content/management/members-roles-permissions.mdx (7)

10-11: Fix grammatical error in teams workflows.

Add an apostrophe to show possession.

-members with specific permissions can create and/or assign custom roles tailored to your teams workflows.
+members with specific permissions can create and/or assign custom roles tailored to your team's workflows.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~10-~10: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...or assign custom roles tailored to your teams workflows. When assinging a role to an...

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


21-22: Fix missing apostrophe in organization's.

Add an apostrophe to show possession.

-Managing members, roles and permissions is done within the organizations `Member` section on the
+Managing members, roles and permissions is done within the organization's `Member` section on the
🧰 Tools
🪛 LanguageTool

[uncategorized] ~21-~21: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...oles and permissions is done within the organizations Member section on the Hive Dashboard....

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


42-43: Improve readability with proper contraction.

Use "cannot" instead of "can not" for better readability.

-These roles are read-only, permissions can not be added or removed.
+These roles are read-only, permissions cannot be added or removed.
🧰 Tools
🪛 LanguageTool

[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


51-52: Add missing comma for better readability.

Add a comma after the introductory phrase.

-Instead of using the predefined member roles you can create your own member roles.
+Instead of using the predefined member roles, you can create your own member roles.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~51-~51: A comma might be missing here.
Context: ... Instead of using the predefined member roles you can create your own member roles. M...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


77-79: Improve preposition usage.

Replace "about" with "of" for better clarity.

-overview about the permissions that will be assigned to that role.
+overview of the permissions that will be assigned to that role.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~78-~78: The preposition “of” seems more likely in this position.
Context: ...on` button, for getting a full overview about the permissions that will be assigned t...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION)


161-162: Use "who" for people references.

When referring to people, use "who" instead of "that".

-Organization members are users that have a member roles assigned.
+Organization members are users who have a member roles assigned.
🧰 Tools
🪛 LanguageTool

[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


171-173: Add missing articles.

Add "the" before nouns for better readability.

-To invite others to your organization, go to **Members** tab under your organization. To invite a
-new member to your organization, write their email address and click on **Send an invite** button.
+To invite others to your organization, go to the **Members** tab under your organization. To invite a
+new member to your organization, write their email address and click on the **Send an invite** button.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~171-~171: You might be missing the article “the” here.
Context: ...vite others to your organization, go to Members tab under your organization. ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~172-~172: You might be missing the article “the” here.
Context: ... write their email address and click on Send an invite button. import orgInv...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e8820e0 and 2c78b75.

📒 Files selected for processing (2)
  • packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx (1 hunks)
  • packages/web/docs/src/content/management/members-roles-permissions.mdx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/web/docs/src/app/product-updates/(posts)/2025-01-30-new-permission-system/page.mdx
🧰 Additional context used
📓 Path-based instructions (1)
packages/web/docs/src/content/management/members-roles-permissions.mdx (1)

Pattern packages/web/docs/**: The main landing page and documentation website. It's built using TypeScript, Tailwind, NextJS and Nextra.

In PRs that adds a new feature to the product, we would like to make sure that the PR includes the following:

  • Up to date documentation in packages/web/docs/src/content
  • A product update in packages/web/docs/src/app/product-updates
🪛 LanguageTool
packages/web/docs/src/content/management/members-roles-permissions.mdx

[uncategorized] ~10-~10: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...or assign custom roles tailored to your teams workflows. When assinging a role to an...

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


[uncategorized] ~21-~21: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...oles and permissions is done within the organizations Member section on the Hive Dashboard....

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[uncategorized] ~51-~51: A comma might be missing here.
Context: ... Instead of using the predefined member roles you can create your own member roles. M...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[uncategorized] ~74-~74: This verb may not be in the correct form. Consider using a different form for this context.
Context: ...d on each other. E.g. you can not allow deleting a project without granting the permissi...

(AI_EN_LECTOR_REPLACEMENT_VERB_FORM)


[uncategorized] ~78-~78: The preposition “of” seems more likely in this position.
Context: ...on` button, for getting a full overview about the permissions that will be assigned t...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[uncategorized] ~171-~171: You might be missing the article “the” here.
Context: ...vite others to your organization, go to Members tab under your organization. ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~172-~172: You might be missing the article “the” here.
Context: ... write their email address and click on Send an invite button. import orgInv...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)


[uncategorized] ~237-~237: Possible missing article found.
Context: ...e hierachical order of resources within Hive. Permissions on the organization level ...

(AI_HYDRA_LEO_MISSING_THE)

🔇 Additional comments (5)
packages/web/docs/src/content/management/members-roles-permissions.mdx (5)

13-14: Fix multiple typos in the introduction.

The sentence contains multiple typos that affect readability.

-When assinging a role to an user, the permissionsgranted by that role can be restricted to a set of
+When assigning a role to a user, the permissions granted by that role can be restricted to a set of
🧰 Tools
🪛 LanguageTool

[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


16-17: Fix grammatical error in bullet point.

-Fully or partially access to projects to a group of users
+Full or partial access to projects for a group of users

101-158: LGTM!

The Update/Delete Member Roles section is well-structured and clear.

🧰 Tools
🪛 LanguageTool

[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


304-305: Fix typo in granular access section.

-When selecting grnular access for a project, you can further specify which targets and which
+When selecting granular access for a project, you can further specify which targets and which

1-319: Overall documentation structure and content is excellent!

The documentation provides a comprehensive guide to member roles and permissions management. The hierarchical explanation of permissions, along with visual aids and examples, makes it easy to understand the system.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~10-~10: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...or assign custom roles tailored to your teams workflows. When assinging a role to an...

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


[misspelling] ~13-~13: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ms workflows. When assinging a role to an user, the permissionsgranted by that ro...

(EN_A_VS_AN)


[uncategorized] ~21-~21: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...oles and permissions is done within the organizations Member section on the Hive Dashboard....

(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)


[style] ~42-~42: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ... These roles are read-only, permissions can not be added or removed. | Role Name | Des...

(CAN_NOT_PREMIUM)


[uncategorized] ~51-~51: A comma might be missing here.
Context: ... Instead of using the predefined member roles you can create your own member roles. M...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[style] ~74-~74: Unless you want to emphasize “not”, use “cannot” which is more common.
Context: ...missions depend on each other. E.g. you can not allow deleting a project without granti...

(CAN_NOT_PREMIUM)


[uncategorized] ~74-~74: This verb may not be in the correct form. Consider using a different form for this context.
Context: ...d on each other. E.g. you can not allow deleting a project without granting the permissi...

(AI_EN_LECTOR_REPLACEMENT_VERB_FORM)


[uncategorized] ~78-~78: The preposition “of” seems more likely in this position.
Context: ...on` button, for getting a full overview about the permissions that will be assigned t...

(AI_EN_LECTOR_REPLACEMENT_PREPOSITION)


[grammar] ~88-~88: The verb “double-check” is spelled with a hyphen.
Context: ...ed-lg drop-shadow-md" /> Here you, can double check your selection and proceed with the cre...

(DOUBLE_HYPHEN)


[misspelling] ~92-~92: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...overview and is ready to be assigned to a organization member. import createRole...

(EN_A_VS_AN)


[typographical] ~127-~127: Consider adding a comma here.
Context: ...me="mt-8 rounded-lg drop-shadow-md" /> After that the permissions for the role are update...

(FOR_THAT_COMMA)


[style] ~161-~161: Consider using “who” when you are referring to people instead of objects.
Context: ...Members Organization members are users that have a member roles assigned. The membe...

(THAT_WHO)


[uncategorized] ~171-~171: You might be missing the article “the” here.
Context: ...vite others to your organization, go to Members tab under your organization. ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~172-~172: You might be missing the article “the” here.
Context: ... write their email address and click on Send an invite button. import orgInv...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[style] ~172-~172: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ir email address and click on Send an invite button. import orgInviteMemberImage ...

(AN_INVITE)


[style] ~185-~185: The noun “invitation” is usually used instead of ‘invite’ in formal writing.
Context: ...ber to your Hive organization. Once an invite has been created, you can also copy the...

(AN_INVITE)


[uncategorized] ~198-~198: Did you mean: “By default,”?
Context: ...ion are specified by the assigned role. By default a organization member is assigned the `...

(BY_DEFAULT_COMMA)


[misspelling] ~199-~199: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...cified by the assigned role. By default a organization member is assigned the `Vi...

(EN_A_VS_AN)


[typographical] ~199-~199: The word “however” is an adverb that can’t be used like a conjunction, and therefore needs to be separated from the sentence.
Context: ...ion member is assigned the Viewer role, however, you can assign any predefined or custom...

(HOWEVER_SENTENCE)


[misspelling] ~231-~231: Use “an” instead of ‘a’ if the following word starts with a vowel sound, e.g. ‘an article’, ‘an hour’.
Context: ...s Sometimes you might want to restrict a organization member to only being able ...

(EN_A_VS_AN)


[uncategorized] ~237-~237: Possible missing article found.
Context: ...e hierachical order of resources within Hive. Permissions on the organization level ...

(AI_HYDRA_LEO_MISSING_THE)

@n1ru4l n1ru4l merged commit c6ad005 into main Jan 30, 2025
30 checks passed
@n1ru4l n1ru4l deleted the docs-permission-member-roles branch January 30, 2025 12:47
@coderabbitai coderabbitai bot mentioned this pull request Jan 30, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

4 participants