Skip to content

Add ConnectRPC interceptor for cross-service permission checks #109

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions