Skip to content

Add ConnectRPC interceptor for cross-service permission checks #109

@haasonsaas

Description

@haasonsaas

Context

As Tier 2 services build out, every service needs to verify caller permissions via identity's CheckPermission RPC. Rather than each service implementing this independently, service-runtime should provide a shared ConnectRPC interceptor.

Requirements

  • Implement PermissionInterceptor that extracts caller identity from request metadata
  • Call identity's CheckPermission RPC with the caller, resource, and action
  • Support declarative permission annotations on service methods (e.g., require: "meter:budget:write")
  • Cache permission results in Redis with short TTL (30s) to avoid per-request round-trips
  • Return proper ConnectRPC error codes on denial (permission_denied with descriptive message)
  • Bypass for internal service-to-service calls using mTLS identity
  • Add unit tests with mock identity client

Why in service-runtime

This is cross-cutting infrastructure. Implementing it once in the shared runtime means all 20+ services get consistent permission enforcement with a one-line interceptor registration.

Dependencies

  • evalops/identityCheckPermission RPC must exist first
  • evalops/proto — permission annotation proto options

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions