From db7381b7a25c3451e87f1811891ccc12c9fe827b Mon Sep 17 00:00:00 2001 From: Alec Merdler Date: Wed, 14 Feb 2024 10:50:17 -0500 Subject: [PATCH] Promote BulkCheckPermission to v1 The 'BulkCheckPermission' API is stable and can be promoted into the v1 'PermissionsService'. --- authzed/api/v1/permission_service.proto | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/authzed/api/v1/permission_service.proto b/authzed/api/v1/permission_service.proto index e28b73e..100a22f 100644 --- a/authzed/api/v1/permission_service.proto +++ b/authzed/api/v1/permission_service.proto @@ -6,6 +6,7 @@ option java_package = "com.authzed.api.v1"; import "google/protobuf/struct.proto"; import "google/api/annotations.proto"; +import "google/rpc/status.proto"; import "validate/validate.proto"; import "authzed/api/v1/core.proto"; @@ -56,6 +57,16 @@ service PermissionsService { }; } + // BulkCheckPermission accepts a list of permission checks and returns + // the results of those checks in a single response. + rpc BulkCheckPermission(BulkCheckPermissionRequest) + returns (BulkCheckPermissionResponse) { + option (google.api.http) = { + post: "/v1/permissions/bulkcheckpermission" + body: "*" + }; + } + // ExpandPermissionTree reveals the graph structure for a resource's // permission or relation. This RPC does not recurse infinitely deep and may // require multiple calls to fully unnest a deeply nested graph. @@ -349,6 +360,46 @@ message CheckPermissionResponse { PartialCaveatInfo partial_caveat_info = 3 [ (validate.rules).message.required = false ]; } +message BulkCheckPermissionRequest { + Consistency consistency = 1; + + repeated BulkCheckPermissionRequestItem items = 2 [ (validate.rules).repeated .items.message.required = true ]; +} + +message BulkCheckPermissionRequestItem { + ObjectReference resource = 1 [ (validate.rules).message.required = true ]; + + string permission = 2 [ (validate.rules).string = { + pattern : "^([a-z][a-z0-9_]{1,62}[a-z0-9])?$", + max_bytes : 64, + } ]; + + SubjectReference subject = 3 [ (validate.rules).message.required = true ]; + + google.protobuf.Struct context = 4 [ (validate.rules).message.required = false ]; +} + +message BulkCheckPermissionResponse { + ZedToken checked_at = 1 [ (validate.rules).message.required = false ]; + + repeated BulkCheckPermissionPair pairs = 2 [ (validate.rules).repeated .items.message.required = true ]; +} + +message BulkCheckPermissionPair { + BulkCheckPermissionRequestItem request = 1; + + oneof response { + BulkCheckPermissionResponseItem item = 2; + google.rpc.Status error = 3; + } +} + +message BulkCheckPermissionResponseItem { + CheckPermissionResponse.Permissionship permissionship = 1 [ (validate.rules).enum = {defined_only: true, not_in: [0]} ]; + + PartialCaveatInfo partial_caveat_info = 2 [ (validate.rules).message.required = false ]; +} + // ExpandPermissionTreeRequest returns a tree representing the expansion of all // relationships found accessible from a permission or relation on a particular // resource.