Skip to content

refactor(api): require resource in CheckResourcePermission - #1886

Open
AmanGIT07 wants to merge 3 commits into
mainfrom
refactor/require-resource-in-permission-check
Open

refactor(api): require resource in CheckResourcePermission#1886
AmanGIT07 wants to merge 3 commits into
mainfrom
refactor/require-resource-in-permission-check

Conversation

@AmanGIT07

Copy link
Copy Markdown
Contributor

Summary

CheckResourcePermission accepts the object only via the resource field (namespace:id). The deprecated object_id/object_namespace request fields are no longer read; requests sending only those fields now receive InvalidArgument. Namespace aliases keep working inside resource. Part of #1782.

Changes

  • internal/api/v1beta1connect/permission_check.go: remove the split-field fallback; reject a missing or malformed resource
  • test/e2e/regression/onboarding_test.go, serviceusers_test.go, api_test.go: check requests send resource
  • internal/api/v1beta1connect/permission_check_test.go: success cases send resource; add missing-resource case

Test Plan

  • go test ./internal/api/v1beta1connect/ passes
  • make lint passes (0 issues)
  • Onboarding, service-users, and API e2e regression suites pass

🤖 Generated with Claude Code

CheckResourcePermission reads the object only from the resource field
("namespace:id") and returns InvalidArgument when it is missing or
malformed. The deprecated object_id/object_namespace request fields are
no longer read. E2E tests send the resource form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
frontier Ready Ready Preview Aug 17, 2026 4:18pm

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

An error occurred during the review process. Please try again later.

📝 Walkthrough

Summary by CodeRabbit

  • Bug Fixes
    • Permission checks now require a valid, namespace-qualified resource identifier.
    • Requests missing or containing an invalid resource identifier return a clear invalid-argument error.
    • Updated permission checks across onboarding, relation, and service-user workflows to use the unified resource format.

Walkthrough

Permission handlers now require namespace-qualified values in Resource. They reject malformed, missing, or incomplete identifiers with InvalidArgument and ErrNamespaceSplitNotation. Unit and end-to-end tests now use the combined field.

Changes

Permission resource identifier migration

Layer / File(s) Summary
Resource validation and unit coverage
internal/api/v1beta1connect/permission_check.go, internal/api/v1beta1connect/permission_check_test.go
Permission handlers require valid combined Resource identifiers and reject deprecated split fields. Tests cover single and batch permission checks.
End-to-end permission request migration
test/e2e/regression/api_test.go, test/e2e/regression/onboarding_test.go, test/e2e/regression/serviceusers_test.go
Regression and onboarding permission checks now use namespace-qualified values in Resource instead of separate object fields.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 27ee7

The API validation refactor and its callers are updated to use the required resource format; no actionable merge-blocking risk remains after normal checks and review. An additional empty-namespace edge-case test is a non-blocking follow-up.

Possibly related PRs

Suggested reviewers: rohilsurana

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5a381cba-390a-4d76-b8c0-f350fcbc32c1

📥 Commits

Reviewing files that changed from the base of the PR and between 7c10c55 and 7105710.

📒 Files selected for processing (5)
  • internal/api/v1beta1connect/permission_check.go
  • internal/api/v1beta1connect/permission_check_test.go
  • test/e2e/regression/api_test.go
  • test/e2e/regression/onboarding_test.go
  • test/e2e/regression/serviceusers_test.go

Comment thread internal/api/v1beta1connect/permission_check_test.go
@coveralls

coveralls commented Aug 14, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 32038923635

Warning

Build has drifted: This PR's base is out of sync with its target branch, so coverage data may include unrelated changes.
Quick fix: rebase this PR. Learn more →

Coverage increased (+0.05%) to 48.746%

Details

  • Coverage increased (+0.05%) from the base build.
  • Patch coverage: 2 uncovered changes across 1 file (4 of 6 lines covered, 66.67%).
  • 60 coverage regressions across 4 files.

Uncovered Changes

File Changed Covered %
internal/api/v1beta1connect/permission_check.go 6 4 66.67%

Coverage Regressions

60 previously-covered lines in 4 files lost coverage.

File Lines Losing Coverage Coverage
internal/api/v1beta1connect/permission.go 29 59.8%
cmd/permission.go 17 45.58%
internal/bootstrap/schema/schema.go 12 26.83%
internal/reconcile/permission_reconciler.go 2 80.2%

Coverage Stats

Coverage Status
Relevant Lines: 40083
Covered Lines: 19539
Line Coverage: 48.75%
Coverage Strength: 15.67 hits per line

💛 - Coveralls

BatchCheckPermission rejects a resource with an empty namespace or id
as InvalidArgument instead of failing at SpiceDB as internal. All three
resource guards in the file, and the federated subject guard, return
the namespace-notation error so callers see the expected format.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 49074c84-636d-440d-a48b-0457f5e47b3a

📥 Commits

Reviewing files that changed from the base of the PR and between 7105710 and 27ee7b2.

📒 Files selected for processing (2)
  • internal/api/v1beta1connect/permission_check.go
  • internal/api/v1beta1connect/permission_check_test.go

Included review availability: Your plan includes up to 2 reviews per rolling hour; 0 remain after this review.

Comment on lines +192 to +200
name: "should return bad request error if a body resource id part is empty",
request: connect.NewRequest(&frontierv1beta1.BatchCheckPermissionRequest{
Bodies: []*frontierv1beta1.BatchCheckPermissionBody{
{Resource: "organization:", Permission: schema.UpdatePermission},
},
}),
wantErr: connect.NewError(connect.CodeInvalidArgument, ErrNamespaceSplitNotation),
},
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add an empty namespace test for BatchCheckPermission.

SplitNamespaceAndResourceID(":id") returns an empty namespace without a parsing error. The handler rejects this branch, but the batch tests only cover malformed input and an empty ID. Add a body with Resource: ":" + testRelationV2.Object.ID and expect CodeInvalidArgument with ErrNamespaceSplitNotation.

Proposed test case
 		{
 			name: "should return bad request error if a body resource id part is empty",
 			request: connect.NewRequest(&frontierv1beta1.BatchCheckPermissionRequest{
 				Bodies: []*frontierv1beta1.BatchCheckPermissionBody{
 					{Resource: "organization:", Permission: schema.UpdatePermission},
 				},
 			}),
 			wantErr: connect.NewError(connect.CodeInvalidArgument, ErrNamespaceSplitNotation),
 		},
+		{
+			name: "should return bad request error if a body resource namespace part is empty",
+			request: connect.NewRequest(&frontierv1beta1.BatchCheckPermissionRequest{
+				Bodies: []*frontierv1beta1.BatchCheckPermissionBody{
+					{Resource: ":" + testRelationV2.Object.ID, Permission: schema.UpdatePermission},
+				},
+			}),
+			wantErr: connect.NewError(connect.CodeInvalidArgument, ErrNamespaceSplitNotation),
+		},
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
name: "should return bad request error if a body resource id part is empty",
request: connect.NewRequest(&frontierv1beta1.BatchCheckPermissionRequest{
Bodies: []*frontierv1beta1.BatchCheckPermissionBody{
{Resource: "organization:", Permission: schema.UpdatePermission},
},
}),
wantErr: connect.NewError(connect.CodeInvalidArgument, ErrNamespaceSplitNotation),
},
}
name: "should return bad request error if a body resource id part is empty",
request: connect.NewRequest(&frontierv1beta1.BatchCheckPermissionRequest{
Bodies: []*frontierv1beta1.BatchCheckPermissionBody{
{Resource: "organization:", Permission: schema.UpdatePermission},
},
}),
wantErr: connect.NewError(connect.CodeInvalidArgument, ErrNamespaceSplitNotation),
},
{
name: "should return bad request error if a body resource namespace part is empty",
request: connect.NewRequest(&frontierv1beta1.BatchCheckPermissionRequest{
Bodies: []*frontierv1beta1.BatchCheckPermissionBody{
{Resource: ":" + testRelationV2.Object.ID, Permission: schema.UpdatePermission},
},
}),
wantErr: connect.NewError(connect.CodeInvalidArgument, ErrNamespaceSplitNotation),
},
}

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants