diff --git a/docs/api-reference/apidocs.swagger.json b/docs/api-reference/apidocs.swagger.json index 62b78b701..2d8e1a082 100644 --- a/docs/api-reference/apidocs.swagger.json +++ b/docs/api-reference/apidocs.swagger.json @@ -651,6 +651,47 @@ ] } }, + "/v1/tenants/{tenant_id}/permissions/bulk-check": { + "post": { + "summary": "bulk check api", + "description": "Check multiple permissions in a single request. Maximum 100 requests allowed.", + "operationId": "permissions.bulk-check", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/PermissionBulkCheckResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/Status" + } + } + }, + "parameters": [ + { + "name": "tenant_id", + "description": "Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant \u003ccode\u003et1\u003c/code\u003e for this field. Required, and must match the pattern \\“[a-zA-Z0-9-,]+\\“, max 64 bytes.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/BulkCheckBody" + } + } + ], + "tags": [ + "Permission" + ] + } + }, "/v1/tenants/{tenant_id}/permissions/check": { "post": { "summary": "check api", @@ -1479,6 +1520,36 @@ "default": "ATTRIBUTE_TYPE_UNSPECIFIED", "description": "Enumerates the types of attribute.\n\n - ATTRIBUTE_TYPE_UNSPECIFIED: Not specified attribute type. This is the default value.\n - ATTRIBUTE_TYPE_BOOLEAN: A boolean attribute type.\n - ATTRIBUTE_TYPE_BOOLEAN_ARRAY: A boolean array attribute type.\n - ATTRIBUTE_TYPE_STRING: A string attribute type.\n - ATTRIBUTE_TYPE_STRING_ARRAY: A string array attribute type.\n - ATTRIBUTE_TYPE_INTEGER: An integer attribute type.\n - ATTRIBUTE_TYPE_INTEGER_ARRAY: An integer array attribute type.\n - ATTRIBUTE_TYPE_DOUBLE: A double attribute type.\n - ATTRIBUTE_TYPE_DOUBLE_ARRAY: A double array attribute type." }, + "BulkCheckBody": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/PermissionCheckRequestMetadata", + "description": "Metadata associated with this request, required." + }, + "items": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PermissionBulkCheckRequestItem" + }, + "description": "List of permission check requests, maximum 100 items." + }, + "context": { + "$ref": "#/definitions/Context", + "description": "Contextual data that can be dynamically added to permission check requests. See details on [Contextual Data](../../operations/contextual-tuples)" + }, + "arguments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Argument" + }, + "description": "Additional arguments associated with this request." + } + }, + "description": "PermissionBulkCheckRequest is the request message for the BulkCheck method in the Permission service." + }, "Bundle.DeleteBody": { "type": "object", "properties": { @@ -2487,6 +2558,39 @@ }, "description": "PermissionExpandRequest is the request message for the Expand method in the Permission service." }, + "PermissionBulkCheckRequestItem": { + "type": "object", + "properties": { + "entity": { + "$ref": "#/definitions/Entity", + "example": "repository:1", + "description": "Entity on which the permission needs to be checked, required." + }, + "permission": { + "type": "string", + "description": "The action the user wants to perform on the resource" + }, + "subject": { + "$ref": "#/definitions/Subject", + "description": "Subject for which the permission needs to be checked, required." + } + }, + "title": "BULK CHECK" + }, + "PermissionBulkCheckResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PermissionCheckResponse" + }, + "description": "List of permission check responses corresponding to each request." + } + }, + "description": "PermissionBulkCheckResponse is the response message for the BulkCheck method in the Permission service." + }, "PermissionCheckRequestMetadata": { "type": "object", "properties": { diff --git a/docs/api-reference/openapiv2/apidocs.swagger.json b/docs/api-reference/openapiv2/apidocs.swagger.json index f09fd6ad0..a67cbf45d 100644 --- a/docs/api-reference/openapiv2/apidocs.swagger.json +++ b/docs/api-reference/openapiv2/apidocs.swagger.json @@ -651,6 +651,47 @@ ] } }, + "/v1/tenants/{tenant_id}/permissions/bulk-check": { + "post": { + "summary": "bulk check api", + "description": "Check multiple permissions in a single request. Maximum 100 requests allowed.", + "operationId": "permissions.bulk-check", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/PermissionBulkCheckResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/Status" + } + } + }, + "parameters": [ + { + "name": "tenant_id", + "description": "Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant \u003ccode\u003et1\u003c/code\u003e for this field. Required, and must match the pattern \\“[a-zA-Z0-9-,]+\\“, max 64 bytes.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/BulkCheckBody" + } + } + ], + "tags": [ + "Permission" + ] + } + }, "/v1/tenants/{tenant_id}/permissions/check": { "post": { "summary": "check api", @@ -1477,6 +1518,36 @@ ], "description": "Enumerates the types of attribute.\n\n - ATTRIBUTE_TYPE_BOOLEAN: A boolean attribute type.\n - ATTRIBUTE_TYPE_BOOLEAN_ARRAY: A boolean array attribute type.\n - ATTRIBUTE_TYPE_STRING: A string attribute type.\n - ATTRIBUTE_TYPE_STRING_ARRAY: A string array attribute type.\n - ATTRIBUTE_TYPE_INTEGER: An integer attribute type.\n - ATTRIBUTE_TYPE_INTEGER_ARRAY: An integer array attribute type.\n - ATTRIBUTE_TYPE_DOUBLE: A double attribute type.\n - ATTRIBUTE_TYPE_DOUBLE_ARRAY: A double array attribute type." }, + "BulkCheckBody": { + "type": "object", + "properties": { + "metadata": { + "$ref": "#/definitions/PermissionCheckRequestMetadata", + "description": "Metadata associated with this request, required." + }, + "items": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PermissionBulkCheckRequestItem" + }, + "description": "List of permission check requests, maximum 100 items." + }, + "context": { + "$ref": "#/definitions/Context", + "description": "Contextual data that can be dynamically added to permission check requests. See details on [Contextual Data](../../operations/contextual-tuples)" + }, + "arguments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Argument" + }, + "description": "Additional arguments associated with this request." + } + }, + "description": "PermissionBulkCheckRequest is the request message for the BulkCheck method in the Permission service." + }, "Bundle.DeleteBody": { "type": "object", "properties": { @@ -2471,6 +2542,39 @@ }, "description": "PermissionExpandRequest is the request message for the Expand method in the Permission service." }, + "PermissionBulkCheckRequestItem": { + "type": "object", + "properties": { + "entity": { + "$ref": "#/definitions/Entity", + "example": "repository:1", + "description": "Entity on which the permission needs to be checked, required." + }, + "permission": { + "type": "string", + "description": "The action the user wants to perform on the resource" + }, + "subject": { + "$ref": "#/definitions/Subject", + "description": "Subject for which the permission needs to be checked, required." + } + }, + "title": "BULK CHECK" + }, + "PermissionBulkCheckResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PermissionCheckResponse" + }, + "description": "List of permission check responses corresponding to each request." + } + }, + "description": "PermissionBulkCheckResponse is the response message for the BulkCheck method in the Permission service." + }, "PermissionCheckRequestMetadata": { "type": "object", "properties": { diff --git a/internal/servers/permission_server.go b/internal/servers/permission_server.go index 48001ddf6..ad6b73c0a 100644 --- a/internal/servers/permission_server.go +++ b/internal/servers/permission_server.go @@ -3,6 +3,8 @@ package servers import ( "context" "log/slog" + "errors" + "sync" otelCodes "go.opentelemetry.io/otel/codes" "google.golang.org/grpc/status" @@ -47,6 +49,133 @@ func (r *PermissionServer) Check(ctx context.Context, request *v1.PermissionChec return response, nil } +// BulkCheck - Performs multiple authorization checks in a single request +func (r *PermissionServer) BulkCheck(ctx context.Context, request *v1.PermissionBulkCheckRequest) (*v1.PermissionBulkCheckResponse, error) { + // emptyResp is a default, empty response that we will return in case of an error or when the context is cancelled. + emptyResp := &v1.PermissionBulkCheckResponse{ + Results: make([]*v1.PermissionCheckResponse, 0), + } + + ctx, span := internal.Tracer.Start(ctx, "permissions.bulk-check") + defer span.End() + + // Validate tenant_id + if request.GetTenantId() == "" { + err := status.Error(GetStatus(nil), "tenant_id is required") + span.RecordError(err) + span.SetStatus(otelCodes.Error, err.Error()) + return nil, err + } + + checkItems := request.GetItems() + + // Validate number of requests + if len(checkItems) == 0 { + err := status.Error(GetStatus(nil), "at least one item is required") + span.RecordError(err) + span.SetStatus(otelCodes.Error, err.Error()) + return nil, err + } + + if len(checkItems) > 100 { + err := status.Error(GetStatus(nil), "maximum 100 items allowed") + span.RecordError(err) + span.SetStatus(otelCodes.Error, err.Error()) + return nil, err + } + + // Create a buffered channel for BulkPermissionCheckResponses. + // The buffer size is equal to the number of references in the entity. + type ResultChannel struct {int; *v1.PermissionCheckResponse} + resultChannel := make(chan ResultChannel, len(checkItems)) + + // The WaitGroup and Mutex are used for synchronization. + var wg sync.WaitGroup + var mutex sync.Mutex + + // Process each check request + for i, checkRequestItem := range checkItems { + wg.Add(1) + + go func(index int, checkRequestItem *v1.PermissionBulkCheckRequestItem) { + defer wg.Done() + + // Validate individual request + v := checkRequestItem.Validate() + if v != nil { + // Return error response for this check + resultChannel <- ResultChannel{ + index, + &v1.PermissionCheckResponse{ + Can: v1.CheckResult_CHECK_RESULT_DENIED, + Metadata: &v1.PermissionCheckResponseMetadata{ + CheckCount: 0, + }, + }, + } + return + } + + // Perform the check using existing Check function + checkRequest := &v1.PermissionCheckRequest{ + TenantId: request.GetTenantId(), + Subject: checkRequestItem.GetSubject(), + Entity: checkRequestItem.GetEntity(), + Permission: checkRequestItem.GetPermission(), + Metadata: request.GetMetadata(), + Context: request.GetContext(), + Arguments: request.GetArguments(), + } + response, err := r.invoker.Check(ctx, checkRequest) + if err != nil { + // Log error but don't fail the entire bulk operation + slog.ErrorContext(ctx, "check failed in bulk operation", "error", err.Error(), "index", index) + resultChannel <- ResultChannel{ + index, + &v1.PermissionCheckResponse{ + Can: v1.CheckResult_CHECK_RESULT_DENIED, + Metadata: &v1.PermissionCheckResponseMetadata{ + CheckCount: 0, + }, + }, + } + return + } + + resultChannel <- ResultChannel{index, response} + }(i, checkRequestItem) + } + + // Once the function returns, we wait for all goroutines to finish, then close the resultChannel. + defer func() { + wg.Wait() + close(resultChannel) + }() + + // We read the responses from the resultChannel. + // We expect as many responses as there are references in the entity. + results := make([]*v1.PermissionCheckResponse, len(request.GetItems())) + for range checkItems { + select { + // If we receive a response from the resultChannel, we check for errors. + case response := <-resultChannel: + // If there's no error, we add the result to our response's Results map. + // We use a mutex to safely update the map since multiple goroutines may be writing to it concurrently. + mutex.Lock() + results[response.int] = response.PermissionCheckResponse + mutex.Unlock() + + // If the context is done (i.e., canceled or deadline exceeded), we return an empty response and an error. + case <-ctx.Done(): + return emptyResp, errors.New(v1.ErrorCode_ERROR_CODE_CANCELLED.String()) + } + } + + return &v1.PermissionBulkCheckResponse{ + Results: results, + }, nil +} + // Expand - Get schema actions in a tree structure func (r *PermissionServer) Expand(ctx context.Context, request *v1.PermissionExpandRequest) (*v1.PermissionExpandResponse, error) { ctx, span := internal.Tracer.Start(ctx, "permissions.expand") diff --git a/pkg/pb/base/v1/service.pb.go b/pkg/pb/base/v1/service.pb.go index 99401c2f5..457bdbc82 100644 --- a/pkg/pb/base/v1/service.pb.go +++ b/pkg/pb/base/v1/service.pb.go @@ -289,6 +289,198 @@ func (x *PermissionCheckResponseMetadata) GetCheckCount() int32 { return 0 } +// BULK CHECK +type PermissionBulkCheckRequestItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Entity on which the permission needs to be checked, required. + Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + // Name of the permission or relation, required, must start with a letter and can include alphanumeric and underscore, max 64 bytes. + Permission string `protobuf:"bytes,2,opt,name=permission,proto3" json:"permission,omitempty"` + // Subject for which the permission needs to be checked, required. + Subject *Subject `protobuf:"bytes,3,opt,name=subject,proto3" json:"subject,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PermissionBulkCheckRequestItem) Reset() { + *x = PermissionBulkCheckRequestItem{} + mi := &file_base_v1_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PermissionBulkCheckRequestItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PermissionBulkCheckRequestItem) ProtoMessage() {} + +func (x *PermissionBulkCheckRequestItem) ProtoReflect() protoreflect.Message { + mi := &file_base_v1_service_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PermissionBulkCheckRequestItem.ProtoReflect.Descriptor instead. +func (*PermissionBulkCheckRequestItem) Descriptor() ([]byte, []int) { + return file_base_v1_service_proto_rawDescGZIP(), []int{4} +} + +func (x *PermissionBulkCheckRequestItem) GetEntity() *Entity { + if x != nil { + return x.Entity + } + return nil +} + +func (x *PermissionBulkCheckRequestItem) GetPermission() string { + if x != nil { + return x.Permission + } + return "" +} + +func (x *PermissionBulkCheckRequestItem) GetSubject() *Subject { + if x != nil { + return x.Subject + } + return nil +} + +// PermissionBulkCheckRequest is the request message for the BulkCheck method in the Permission service. +type PermissionBulkCheckRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Identifier of the tenant, required, and must match the pattern "[a-zA-Z0-9-,]+", max 64 bytes. + TenantId string `protobuf:"bytes,1,opt,name=tenant_id,proto3" json:"tenant_id,omitempty"` + // Metadata associated with this request, required. + Metadata *PermissionCheckRequestMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + // List of permission check requests, maximum 100 items. + Items []*PermissionBulkCheckRequestItem `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"` + // Context associated with this request. + Context *Context `protobuf:"bytes,4,opt,name=context,proto3" json:"context,omitempty"` + // Additional arguments associated with this request. + Arguments []*Argument `protobuf:"bytes,5,rep,name=arguments,proto3" json:"arguments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PermissionBulkCheckRequest) Reset() { + *x = PermissionBulkCheckRequest{} + mi := &file_base_v1_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PermissionBulkCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PermissionBulkCheckRequest) ProtoMessage() {} + +func (x *PermissionBulkCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_base_v1_service_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PermissionBulkCheckRequest.ProtoReflect.Descriptor instead. +func (*PermissionBulkCheckRequest) Descriptor() ([]byte, []int) { + return file_base_v1_service_proto_rawDescGZIP(), []int{5} +} + +func (x *PermissionBulkCheckRequest) GetTenantId() string { + if x != nil { + return x.TenantId + } + return "" +} + +func (x *PermissionBulkCheckRequest) GetMetadata() *PermissionCheckRequestMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *PermissionBulkCheckRequest) GetItems() []*PermissionBulkCheckRequestItem { + if x != nil { + return x.Items + } + return nil +} + +func (x *PermissionBulkCheckRequest) GetContext() *Context { + if x != nil { + return x.Context + } + return nil +} + +func (x *PermissionBulkCheckRequest) GetArguments() []*Argument { + if x != nil { + return x.Arguments + } + return nil +} + +// PermissionBulkCheckResponse is the response message for the BulkCheck method in the Permission service. +type PermissionBulkCheckResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // List of permission check responses corresponding to each request. + Results []*PermissionCheckResponse `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PermissionBulkCheckResponse) Reset() { + *x = PermissionBulkCheckResponse{} + mi := &file_base_v1_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PermissionBulkCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PermissionBulkCheckResponse) ProtoMessage() {} + +func (x *PermissionBulkCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_base_v1_service_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PermissionBulkCheckResponse.ProtoReflect.Descriptor instead. +func (*PermissionBulkCheckResponse) Descriptor() ([]byte, []int) { + return file_base_v1_service_proto_rawDescGZIP(), []int{6} +} + +func (x *PermissionBulkCheckResponse) GetResults() []*PermissionCheckResponse { + if x != nil { + return x.Results + } + return nil +} + // PermissionExpandRequest is the request message for the Expand method in the Permission service. type PermissionExpandRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -310,7 +502,7 @@ type PermissionExpandRequest struct { func (x *PermissionExpandRequest) Reset() { *x = PermissionExpandRequest{} - mi := &file_base_v1_service_proto_msgTypes[4] + mi := &file_base_v1_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -322,7 +514,7 @@ func (x *PermissionExpandRequest) String() string { func (*PermissionExpandRequest) ProtoMessage() {} func (x *PermissionExpandRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[4] + mi := &file_base_v1_service_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -335,7 +527,7 @@ func (x *PermissionExpandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionExpandRequest.ProtoReflect.Descriptor instead. func (*PermissionExpandRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{4} + return file_base_v1_service_proto_rawDescGZIP(), []int{7} } func (x *PermissionExpandRequest) GetTenantId() string { @@ -393,7 +585,7 @@ type PermissionExpandRequestMetadata struct { func (x *PermissionExpandRequestMetadata) Reset() { *x = PermissionExpandRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[5] + mi := &file_base_v1_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -405,7 +597,7 @@ func (x *PermissionExpandRequestMetadata) String() string { func (*PermissionExpandRequestMetadata) ProtoMessage() {} func (x *PermissionExpandRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[5] + mi := &file_base_v1_service_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -418,7 +610,7 @@ func (x *PermissionExpandRequestMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionExpandRequestMetadata.ProtoReflect.Descriptor instead. func (*PermissionExpandRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{5} + return file_base_v1_service_proto_rawDescGZIP(), []int{8} } func (x *PermissionExpandRequestMetadata) GetSchemaVersion() string { @@ -446,7 +638,7 @@ type PermissionExpandResponse struct { func (x *PermissionExpandResponse) Reset() { *x = PermissionExpandResponse{} - mi := &file_base_v1_service_proto_msgTypes[6] + mi := &file_base_v1_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -458,7 +650,7 @@ func (x *PermissionExpandResponse) String() string { func (*PermissionExpandResponse) ProtoMessage() {} func (x *PermissionExpandResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[6] + mi := &file_base_v1_service_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -471,7 +663,7 @@ func (x *PermissionExpandResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionExpandResponse.ProtoReflect.Descriptor instead. func (*PermissionExpandResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{6} + return file_base_v1_service_proto_rawDescGZIP(), []int{9} } func (x *PermissionExpandResponse) GetTree() *Expand { @@ -511,7 +703,7 @@ type PermissionLookupEntityRequest struct { func (x *PermissionLookupEntityRequest) Reset() { *x = PermissionLookupEntityRequest{} - mi := &file_base_v1_service_proto_msgTypes[7] + mi := &file_base_v1_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -523,7 +715,7 @@ func (x *PermissionLookupEntityRequest) String() string { func (*PermissionLookupEntityRequest) ProtoMessage() {} func (x *PermissionLookupEntityRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[7] + mi := &file_base_v1_service_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -536,7 +728,7 @@ func (x *PermissionLookupEntityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionLookupEntityRequest.ProtoReflect.Descriptor instead. func (*PermissionLookupEntityRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{7} + return file_base_v1_service_proto_rawDescGZIP(), []int{10} } func (x *PermissionLookupEntityRequest) GetTenantId() string { @@ -617,7 +809,7 @@ type PermissionLookupEntityRequestMetadata struct { func (x *PermissionLookupEntityRequestMetadata) Reset() { *x = PermissionLookupEntityRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[8] + mi := &file_base_v1_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -629,7 +821,7 @@ func (x *PermissionLookupEntityRequestMetadata) String() string { func (*PermissionLookupEntityRequestMetadata) ProtoMessage() {} func (x *PermissionLookupEntityRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[8] + mi := &file_base_v1_service_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -642,7 +834,7 @@ func (x *PermissionLookupEntityRequestMetadata) ProtoReflect() protoreflect.Mess // Deprecated: Use PermissionLookupEntityRequestMetadata.ProtoReflect.Descriptor instead. func (*PermissionLookupEntityRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{8} + return file_base_v1_service_proto_rawDescGZIP(), []int{11} } func (x *PermissionLookupEntityRequestMetadata) GetSchemaVersion() string { @@ -679,7 +871,7 @@ type PermissionLookupEntityResponse struct { func (x *PermissionLookupEntityResponse) Reset() { *x = PermissionLookupEntityResponse{} - mi := &file_base_v1_service_proto_msgTypes[9] + mi := &file_base_v1_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -691,7 +883,7 @@ func (x *PermissionLookupEntityResponse) String() string { func (*PermissionLookupEntityResponse) ProtoMessage() {} func (x *PermissionLookupEntityResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[9] + mi := &file_base_v1_service_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -704,7 +896,7 @@ func (x *PermissionLookupEntityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionLookupEntityResponse.ProtoReflect.Descriptor instead. func (*PermissionLookupEntityResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{9} + return file_base_v1_service_proto_rawDescGZIP(), []int{12} } func (x *PermissionLookupEntityResponse) GetEntityIds() []string { @@ -734,7 +926,7 @@ type PermissionLookupEntityStreamResponse struct { func (x *PermissionLookupEntityStreamResponse) Reset() { *x = PermissionLookupEntityStreamResponse{} - mi := &file_base_v1_service_proto_msgTypes[10] + mi := &file_base_v1_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -746,7 +938,7 @@ func (x *PermissionLookupEntityStreamResponse) String() string { func (*PermissionLookupEntityStreamResponse) ProtoMessage() {} func (x *PermissionLookupEntityStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[10] + mi := &file_base_v1_service_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -759,7 +951,7 @@ func (x *PermissionLookupEntityStreamResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use PermissionLookupEntityStreamResponse.ProtoReflect.Descriptor instead. func (*PermissionLookupEntityStreamResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{10} + return file_base_v1_service_proto_rawDescGZIP(), []int{13} } func (x *PermissionLookupEntityStreamResponse) GetEntityId() string { @@ -801,7 +993,7 @@ type PermissionEntityFilterRequest struct { func (x *PermissionEntityFilterRequest) Reset() { *x = PermissionEntityFilterRequest{} - mi := &file_base_v1_service_proto_msgTypes[11] + mi := &file_base_v1_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -813,7 +1005,7 @@ func (x *PermissionEntityFilterRequest) String() string { func (*PermissionEntityFilterRequest) ProtoMessage() {} func (x *PermissionEntityFilterRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[11] + mi := &file_base_v1_service_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -826,7 +1018,7 @@ func (x *PermissionEntityFilterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionEntityFilterRequest.ProtoReflect.Descriptor instead. func (*PermissionEntityFilterRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{11} + return file_base_v1_service_proto_rawDescGZIP(), []int{14} } func (x *PermissionEntityFilterRequest) GetTenantId() string { @@ -893,7 +1085,7 @@ type PermissionEntityFilterRequestMetadata struct { func (x *PermissionEntityFilterRequestMetadata) Reset() { *x = PermissionEntityFilterRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[12] + mi := &file_base_v1_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -905,7 +1097,7 @@ func (x *PermissionEntityFilterRequestMetadata) String() string { func (*PermissionEntityFilterRequestMetadata) ProtoMessage() {} func (x *PermissionEntityFilterRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[12] + mi := &file_base_v1_service_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -918,7 +1110,7 @@ func (x *PermissionEntityFilterRequestMetadata) ProtoReflect() protoreflect.Mess // Deprecated: Use PermissionEntityFilterRequestMetadata.ProtoReflect.Descriptor instead. func (*PermissionEntityFilterRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{12} + return file_base_v1_service_proto_rawDescGZIP(), []int{15} } func (x *PermissionEntityFilterRequestMetadata) GetSchemaVersion() string { @@ -971,7 +1163,7 @@ type PermissionLookupSubjectRequest struct { func (x *PermissionLookupSubjectRequest) Reset() { *x = PermissionLookupSubjectRequest{} - mi := &file_base_v1_service_proto_msgTypes[13] + mi := &file_base_v1_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +1175,7 @@ func (x *PermissionLookupSubjectRequest) String() string { func (*PermissionLookupSubjectRequest) ProtoMessage() {} func (x *PermissionLookupSubjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[13] + mi := &file_base_v1_service_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +1188,7 @@ func (x *PermissionLookupSubjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionLookupSubjectRequest.ProtoReflect.Descriptor instead. func (*PermissionLookupSubjectRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{13} + return file_base_v1_service_proto_rawDescGZIP(), []int{16} } func (x *PermissionLookupSubjectRequest) GetTenantId() string { @@ -1077,7 +1269,7 @@ type PermissionLookupSubjectRequestMetadata struct { func (x *PermissionLookupSubjectRequestMetadata) Reset() { *x = PermissionLookupSubjectRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[14] + mi := &file_base_v1_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1089,7 +1281,7 @@ func (x *PermissionLookupSubjectRequestMetadata) String() string { func (*PermissionLookupSubjectRequestMetadata) ProtoMessage() {} func (x *PermissionLookupSubjectRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[14] + mi := &file_base_v1_service_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1102,7 +1294,7 @@ func (x *PermissionLookupSubjectRequestMetadata) ProtoReflect() protoreflect.Mes // Deprecated: Use PermissionLookupSubjectRequestMetadata.ProtoReflect.Descriptor instead. func (*PermissionLookupSubjectRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{14} + return file_base_v1_service_proto_rawDescGZIP(), []int{17} } func (x *PermissionLookupSubjectRequestMetadata) GetSchemaVersion() string { @@ -1139,7 +1331,7 @@ type PermissionLookupSubjectResponse struct { func (x *PermissionLookupSubjectResponse) Reset() { *x = PermissionLookupSubjectResponse{} - mi := &file_base_v1_service_proto_msgTypes[15] + mi := &file_base_v1_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1151,7 +1343,7 @@ func (x *PermissionLookupSubjectResponse) String() string { func (*PermissionLookupSubjectResponse) ProtoMessage() {} func (x *PermissionLookupSubjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[15] + mi := &file_base_v1_service_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1164,7 +1356,7 @@ func (x *PermissionLookupSubjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionLookupSubjectResponse.ProtoReflect.Descriptor instead. func (*PermissionLookupSubjectResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{15} + return file_base_v1_service_proto_rawDescGZIP(), []int{18} } func (x *PermissionLookupSubjectResponse) GetSubjectIds() []string { @@ -1200,7 +1392,7 @@ type PermissionSubjectPermissionRequest struct { func (x *PermissionSubjectPermissionRequest) Reset() { *x = PermissionSubjectPermissionRequest{} - mi := &file_base_v1_service_proto_msgTypes[16] + mi := &file_base_v1_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1212,7 +1404,7 @@ func (x *PermissionSubjectPermissionRequest) String() string { func (*PermissionSubjectPermissionRequest) ProtoMessage() {} func (x *PermissionSubjectPermissionRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[16] + mi := &file_base_v1_service_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1225,7 +1417,7 @@ func (x *PermissionSubjectPermissionRequest) ProtoReflect() protoreflect.Message // Deprecated: Use PermissionSubjectPermissionRequest.ProtoReflect.Descriptor instead. func (*PermissionSubjectPermissionRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{16} + return file_base_v1_service_proto_rawDescGZIP(), []int{19} } func (x *PermissionSubjectPermissionRequest) GetTenantId() string { @@ -1280,7 +1472,7 @@ type PermissionSubjectPermissionRequestMetadata struct { func (x *PermissionSubjectPermissionRequestMetadata) Reset() { *x = PermissionSubjectPermissionRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[17] + mi := &file_base_v1_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1292,7 +1484,7 @@ func (x *PermissionSubjectPermissionRequestMetadata) String() string { func (*PermissionSubjectPermissionRequestMetadata) ProtoMessage() {} func (x *PermissionSubjectPermissionRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[17] + mi := &file_base_v1_service_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1305,7 +1497,7 @@ func (x *PermissionSubjectPermissionRequestMetadata) ProtoReflect() protoreflect // Deprecated: Use PermissionSubjectPermissionRequestMetadata.ProtoReflect.Descriptor instead. func (*PermissionSubjectPermissionRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{17} + return file_base_v1_service_proto_rawDescGZIP(), []int{20} } func (x *PermissionSubjectPermissionRequestMetadata) GetSchemaVersion() string { @@ -1347,7 +1539,7 @@ type PermissionSubjectPermissionResponse struct { func (x *PermissionSubjectPermissionResponse) Reset() { *x = PermissionSubjectPermissionResponse{} - mi := &file_base_v1_service_proto_msgTypes[18] + mi := &file_base_v1_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1359,7 +1551,7 @@ func (x *PermissionSubjectPermissionResponse) String() string { func (*PermissionSubjectPermissionResponse) ProtoMessage() {} func (x *PermissionSubjectPermissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[18] + mi := &file_base_v1_service_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1372,7 +1564,7 @@ func (x *PermissionSubjectPermissionResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use PermissionSubjectPermissionResponse.ProtoReflect.Descriptor instead. func (*PermissionSubjectPermissionResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{18} + return file_base_v1_service_proto_rawDescGZIP(), []int{21} } func (x *PermissionSubjectPermissionResponse) GetResults() map[string]CheckResult { @@ -1396,7 +1588,7 @@ type WatchRequest struct { func (x *WatchRequest) Reset() { *x = WatchRequest{} - mi := &file_base_v1_service_proto_msgTypes[19] + mi := &file_base_v1_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1408,7 +1600,7 @@ func (x *WatchRequest) String() string { func (*WatchRequest) ProtoMessage() {} func (x *WatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[19] + mi := &file_base_v1_service_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1421,7 +1613,7 @@ func (x *WatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WatchRequest.ProtoReflect.Descriptor instead. func (*WatchRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{19} + return file_base_v1_service_proto_rawDescGZIP(), []int{22} } func (x *WatchRequest) GetTenantId() string { @@ -1450,7 +1642,7 @@ type WatchResponse struct { func (x *WatchResponse) Reset() { *x = WatchResponse{} - mi := &file_base_v1_service_proto_msgTypes[20] + mi := &file_base_v1_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1462,7 +1654,7 @@ func (x *WatchResponse) String() string { func (*WatchResponse) ProtoMessage() {} func (x *WatchResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[20] + mi := &file_base_v1_service_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1475,7 +1667,7 @@ func (x *WatchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WatchResponse.ProtoReflect.Descriptor instead. func (*WatchResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{20} + return file_base_v1_service_proto_rawDescGZIP(), []int{23} } func (x *WatchResponse) GetChanges() *DataChanges { @@ -1500,7 +1692,7 @@ type SchemaWriteRequest struct { func (x *SchemaWriteRequest) Reset() { *x = SchemaWriteRequest{} - mi := &file_base_v1_service_proto_msgTypes[21] + mi := &file_base_v1_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1512,7 +1704,7 @@ func (x *SchemaWriteRequest) String() string { func (*SchemaWriteRequest) ProtoMessage() {} func (x *SchemaWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[21] + mi := &file_base_v1_service_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1525,7 +1717,7 @@ func (x *SchemaWriteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaWriteRequest.ProtoReflect.Descriptor instead. func (*SchemaWriteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{21} + return file_base_v1_service_proto_rawDescGZIP(), []int{24} } func (x *SchemaWriteRequest) GetTenantId() string { @@ -1554,7 +1746,7 @@ type SchemaWriteResponse struct { func (x *SchemaWriteResponse) Reset() { *x = SchemaWriteResponse{} - mi := &file_base_v1_service_proto_msgTypes[22] + mi := &file_base_v1_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1566,7 +1758,7 @@ func (x *SchemaWriteResponse) String() string { func (*SchemaWriteResponse) ProtoMessage() {} func (x *SchemaWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[22] + mi := &file_base_v1_service_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1579,7 +1771,7 @@ func (x *SchemaWriteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaWriteResponse.ProtoReflect.Descriptor instead. func (*SchemaWriteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{22} + return file_base_v1_service_proto_rawDescGZIP(), []int{25} } func (x *SchemaWriteResponse) GetSchemaVersion() string { @@ -1606,7 +1798,7 @@ type SchemaPartialWriteRequest struct { func (x *SchemaPartialWriteRequest) Reset() { *x = SchemaPartialWriteRequest{} - mi := &file_base_v1_service_proto_msgTypes[23] + mi := &file_base_v1_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1618,7 +1810,7 @@ func (x *SchemaPartialWriteRequest) String() string { func (*SchemaPartialWriteRequest) ProtoMessage() {} func (x *SchemaPartialWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[23] + mi := &file_base_v1_service_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1631,7 +1823,7 @@ func (x *SchemaPartialWriteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaPartialWriteRequest.ProtoReflect.Descriptor instead. func (*SchemaPartialWriteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{23} + return file_base_v1_service_proto_rawDescGZIP(), []int{26} } func (x *SchemaPartialWriteRequest) GetTenantId() string { @@ -1667,7 +1859,7 @@ type SchemaPartialWriteRequestMetadata struct { func (x *SchemaPartialWriteRequestMetadata) Reset() { *x = SchemaPartialWriteRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[24] + mi := &file_base_v1_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1679,7 +1871,7 @@ func (x *SchemaPartialWriteRequestMetadata) String() string { func (*SchemaPartialWriteRequestMetadata) ProtoMessage() {} func (x *SchemaPartialWriteRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[24] + mi := &file_base_v1_service_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1692,7 +1884,7 @@ func (x *SchemaPartialWriteRequestMetadata) ProtoReflect() protoreflect.Message // Deprecated: Use SchemaPartialWriteRequestMetadata.ProtoReflect.Descriptor instead. func (*SchemaPartialWriteRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{24} + return file_base_v1_service_proto_rawDescGZIP(), []int{27} } func (x *SchemaPartialWriteRequestMetadata) GetSchemaVersion() string { @@ -1714,7 +1906,7 @@ type SchemaPartialWriteResponse struct { func (x *SchemaPartialWriteResponse) Reset() { *x = SchemaPartialWriteResponse{} - mi := &file_base_v1_service_proto_msgTypes[25] + mi := &file_base_v1_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1726,7 +1918,7 @@ func (x *SchemaPartialWriteResponse) String() string { func (*SchemaPartialWriteResponse) ProtoMessage() {} func (x *SchemaPartialWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[25] + mi := &file_base_v1_service_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1739,7 +1931,7 @@ func (x *SchemaPartialWriteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaPartialWriteResponse.ProtoReflect.Descriptor instead. func (*SchemaPartialWriteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{25} + return file_base_v1_service_proto_rawDescGZIP(), []int{28} } func (x *SchemaPartialWriteResponse) GetSchemaVersion() string { @@ -1764,7 +1956,7 @@ type SchemaReadRequest struct { func (x *SchemaReadRequest) Reset() { *x = SchemaReadRequest{} - mi := &file_base_v1_service_proto_msgTypes[26] + mi := &file_base_v1_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1776,7 +1968,7 @@ func (x *SchemaReadRequest) String() string { func (*SchemaReadRequest) ProtoMessage() {} func (x *SchemaReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[26] + mi := &file_base_v1_service_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1789,7 +1981,7 @@ func (x *SchemaReadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaReadRequest.ProtoReflect.Descriptor instead. func (*SchemaReadRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{26} + return file_base_v1_service_proto_rawDescGZIP(), []int{29} } func (x *SchemaReadRequest) GetTenantId() string { @@ -1818,7 +2010,7 @@ type SchemaReadRequestMetadata struct { func (x *SchemaReadRequestMetadata) Reset() { *x = SchemaReadRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[27] + mi := &file_base_v1_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1830,7 +2022,7 @@ func (x *SchemaReadRequestMetadata) String() string { func (*SchemaReadRequestMetadata) ProtoMessage() {} func (x *SchemaReadRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[27] + mi := &file_base_v1_service_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1843,7 +2035,7 @@ func (x *SchemaReadRequestMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaReadRequestMetadata.ProtoReflect.Descriptor instead. func (*SchemaReadRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{27} + return file_base_v1_service_proto_rawDescGZIP(), []int{30} } func (x *SchemaReadRequestMetadata) GetSchemaVersion() string { @@ -1865,7 +2057,7 @@ type SchemaReadResponse struct { func (x *SchemaReadResponse) Reset() { *x = SchemaReadResponse{} - mi := &file_base_v1_service_proto_msgTypes[28] + mi := &file_base_v1_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1877,7 +2069,7 @@ func (x *SchemaReadResponse) String() string { func (*SchemaReadResponse) ProtoMessage() {} func (x *SchemaReadResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[28] + mi := &file_base_v1_service_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1890,7 +2082,7 @@ func (x *SchemaReadResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaReadResponse.ProtoReflect.Descriptor instead. func (*SchemaReadResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{28} + return file_base_v1_service_proto_rawDescGZIP(), []int{31} } func (x *SchemaReadResponse) GetSchema() *SchemaDefinition { @@ -1919,7 +2111,7 @@ type SchemaListRequest struct { func (x *SchemaListRequest) Reset() { *x = SchemaListRequest{} - mi := &file_base_v1_service_proto_msgTypes[29] + mi := &file_base_v1_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1931,7 +2123,7 @@ func (x *SchemaListRequest) String() string { func (*SchemaListRequest) ProtoMessage() {} func (x *SchemaListRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[29] + mi := &file_base_v1_service_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1944,7 +2136,7 @@ func (x *SchemaListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaListRequest.ProtoReflect.Descriptor instead. func (*SchemaListRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{29} + return file_base_v1_service_proto_rawDescGZIP(), []int{32} } func (x *SchemaListRequest) GetTenantId() string { @@ -1984,7 +2176,7 @@ type SchemaListResponse struct { func (x *SchemaListResponse) Reset() { *x = SchemaListResponse{} - mi := &file_base_v1_service_proto_msgTypes[30] + mi := &file_base_v1_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1996,7 +2188,7 @@ func (x *SchemaListResponse) String() string { func (*SchemaListResponse) ProtoMessage() {} func (x *SchemaListResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[30] + mi := &file_base_v1_service_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2009,7 +2201,7 @@ func (x *SchemaListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaListResponse.ProtoReflect.Descriptor instead. func (*SchemaListResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{30} + return file_base_v1_service_proto_rawDescGZIP(), []int{33} } func (x *SchemaListResponse) GetHead() string { @@ -2044,7 +2236,7 @@ type SchemaList struct { func (x *SchemaList) Reset() { *x = SchemaList{} - mi := &file_base_v1_service_proto_msgTypes[31] + mi := &file_base_v1_service_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2056,7 +2248,7 @@ func (x *SchemaList) String() string { func (*SchemaList) ProtoMessage() {} func (x *SchemaList) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[31] + mi := &file_base_v1_service_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2069,7 +2261,7 @@ func (x *SchemaList) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaList.ProtoReflect.Descriptor instead. func (*SchemaList) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{31} + return file_base_v1_service_proto_rawDescGZIP(), []int{34} } func (x *SchemaList) GetVersion() string { @@ -2105,7 +2297,7 @@ type DataWriteRequest struct { func (x *DataWriteRequest) Reset() { *x = DataWriteRequest{} - mi := &file_base_v1_service_proto_msgTypes[32] + mi := &file_base_v1_service_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2117,7 +2309,7 @@ func (x *DataWriteRequest) String() string { func (*DataWriteRequest) ProtoMessage() {} func (x *DataWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[32] + mi := &file_base_v1_service_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2130,7 +2322,7 @@ func (x *DataWriteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DataWriteRequest.ProtoReflect.Descriptor instead. func (*DataWriteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{32} + return file_base_v1_service_proto_rawDescGZIP(), []int{35} } func (x *DataWriteRequest) GetTenantId() string { @@ -2173,7 +2365,7 @@ type DataWriteRequestMetadata struct { func (x *DataWriteRequestMetadata) Reset() { *x = DataWriteRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[33] + mi := &file_base_v1_service_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2185,7 +2377,7 @@ func (x *DataWriteRequestMetadata) String() string { func (*DataWriteRequestMetadata) ProtoMessage() {} func (x *DataWriteRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[33] + mi := &file_base_v1_service_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2198,7 +2390,7 @@ func (x *DataWriteRequestMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use DataWriteRequestMetadata.ProtoReflect.Descriptor instead. func (*DataWriteRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{33} + return file_base_v1_service_proto_rawDescGZIP(), []int{36} } func (x *DataWriteRequestMetadata) GetSchemaVersion() string { @@ -2220,7 +2412,7 @@ type DataWriteResponse struct { func (x *DataWriteResponse) Reset() { *x = DataWriteResponse{} - mi := &file_base_v1_service_proto_msgTypes[34] + mi := &file_base_v1_service_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2424,7 @@ func (x *DataWriteResponse) String() string { func (*DataWriteResponse) ProtoMessage() {} func (x *DataWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[34] + mi := &file_base_v1_service_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,7 +2437,7 @@ func (x *DataWriteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DataWriteResponse.ProtoReflect.Descriptor instead. func (*DataWriteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{34} + return file_base_v1_service_proto_rawDescGZIP(), []int{37} } func (x *DataWriteResponse) GetSnapToken() string { @@ -2270,7 +2462,7 @@ type RelationshipWriteRequest struct { func (x *RelationshipWriteRequest) Reset() { *x = RelationshipWriteRequest{} - mi := &file_base_v1_service_proto_msgTypes[35] + mi := &file_base_v1_service_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2282,7 +2474,7 @@ func (x *RelationshipWriteRequest) String() string { func (*RelationshipWriteRequest) ProtoMessage() {} func (x *RelationshipWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[35] + mi := &file_base_v1_service_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2295,7 +2487,7 @@ func (x *RelationshipWriteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipWriteRequest.ProtoReflect.Descriptor instead. func (*RelationshipWriteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{35} + return file_base_v1_service_proto_rawDescGZIP(), []int{38} } func (x *RelationshipWriteRequest) GetTenantId() string { @@ -2329,7 +2521,7 @@ type RelationshipWriteRequestMetadata struct { func (x *RelationshipWriteRequestMetadata) Reset() { *x = RelationshipWriteRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[36] + mi := &file_base_v1_service_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2341,7 +2533,7 @@ func (x *RelationshipWriteRequestMetadata) String() string { func (*RelationshipWriteRequestMetadata) ProtoMessage() {} func (x *RelationshipWriteRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[36] + mi := &file_base_v1_service_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2354,7 +2546,7 @@ func (x *RelationshipWriteRequestMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipWriteRequestMetadata.ProtoReflect.Descriptor instead. func (*RelationshipWriteRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{36} + return file_base_v1_service_proto_rawDescGZIP(), []int{39} } func (x *RelationshipWriteRequestMetadata) GetSchemaVersion() string { @@ -2374,7 +2566,7 @@ type RelationshipWriteResponse struct { func (x *RelationshipWriteResponse) Reset() { *x = RelationshipWriteResponse{} - mi := &file_base_v1_service_proto_msgTypes[37] + mi := &file_base_v1_service_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2386,7 +2578,7 @@ func (x *RelationshipWriteResponse) String() string { func (*RelationshipWriteResponse) ProtoMessage() {} func (x *RelationshipWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[37] + mi := &file_base_v1_service_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2399,7 +2591,7 @@ func (x *RelationshipWriteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipWriteResponse.ProtoReflect.Descriptor instead. func (*RelationshipWriteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{37} + return file_base_v1_service_proto_rawDescGZIP(), []int{40} } func (x *RelationshipWriteResponse) GetSnapToken() string { @@ -2430,7 +2622,7 @@ type RelationshipReadRequest struct { func (x *RelationshipReadRequest) Reset() { *x = RelationshipReadRequest{} - mi := &file_base_v1_service_proto_msgTypes[38] + mi := &file_base_v1_service_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2442,7 +2634,7 @@ func (x *RelationshipReadRequest) String() string { func (*RelationshipReadRequest) ProtoMessage() {} func (x *RelationshipReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[38] + mi := &file_base_v1_service_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2455,7 +2647,7 @@ func (x *RelationshipReadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipReadRequest.ProtoReflect.Descriptor instead. func (*RelationshipReadRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{38} + return file_base_v1_service_proto_rawDescGZIP(), []int{41} } func (x *RelationshipReadRequest) GetTenantId() string { @@ -2505,7 +2697,7 @@ type RelationshipReadRequestMetadata struct { func (x *RelationshipReadRequestMetadata) Reset() { *x = RelationshipReadRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[39] + mi := &file_base_v1_service_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2517,7 +2709,7 @@ func (x *RelationshipReadRequestMetadata) String() string { func (*RelationshipReadRequestMetadata) ProtoMessage() {} func (x *RelationshipReadRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[39] + mi := &file_base_v1_service_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2530,7 +2722,7 @@ func (x *RelationshipReadRequestMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipReadRequestMetadata.ProtoReflect.Descriptor instead. func (*RelationshipReadRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{39} + return file_base_v1_service_proto_rawDescGZIP(), []int{42} } func (x *RelationshipReadRequestMetadata) GetSnapToken() string { @@ -2554,7 +2746,7 @@ type RelationshipReadResponse struct { func (x *RelationshipReadResponse) Reset() { *x = RelationshipReadResponse{} - mi := &file_base_v1_service_proto_msgTypes[40] + mi := &file_base_v1_service_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2566,7 +2758,7 @@ func (x *RelationshipReadResponse) String() string { func (*RelationshipReadResponse) ProtoMessage() {} func (x *RelationshipReadResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[40] + mi := &file_base_v1_service_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2579,7 +2771,7 @@ func (x *RelationshipReadResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipReadResponse.ProtoReflect.Descriptor instead. func (*RelationshipReadResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{40} + return file_base_v1_service_proto_rawDescGZIP(), []int{43} } func (x *RelationshipReadResponse) GetTuples() []*Tuple { @@ -2617,7 +2809,7 @@ type AttributeReadRequest struct { func (x *AttributeReadRequest) Reset() { *x = AttributeReadRequest{} - mi := &file_base_v1_service_proto_msgTypes[41] + mi := &file_base_v1_service_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2629,7 +2821,7 @@ func (x *AttributeReadRequest) String() string { func (*AttributeReadRequest) ProtoMessage() {} func (x *AttributeReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[41] + mi := &file_base_v1_service_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2642,7 +2834,7 @@ func (x *AttributeReadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeReadRequest.ProtoReflect.Descriptor instead. func (*AttributeReadRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{41} + return file_base_v1_service_proto_rawDescGZIP(), []int{44} } func (x *AttributeReadRequest) GetTenantId() string { @@ -2692,7 +2884,7 @@ type AttributeReadRequestMetadata struct { func (x *AttributeReadRequestMetadata) Reset() { *x = AttributeReadRequestMetadata{} - mi := &file_base_v1_service_proto_msgTypes[42] + mi := &file_base_v1_service_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2704,7 +2896,7 @@ func (x *AttributeReadRequestMetadata) String() string { func (*AttributeReadRequestMetadata) ProtoMessage() {} func (x *AttributeReadRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[42] + mi := &file_base_v1_service_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2717,7 +2909,7 @@ func (x *AttributeReadRequestMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeReadRequestMetadata.ProtoReflect.Descriptor instead. func (*AttributeReadRequestMetadata) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{42} + return file_base_v1_service_proto_rawDescGZIP(), []int{45} } func (x *AttributeReadRequestMetadata) GetSnapToken() string { @@ -2741,7 +2933,7 @@ type AttributeReadResponse struct { func (x *AttributeReadResponse) Reset() { *x = AttributeReadResponse{} - mi := &file_base_v1_service_proto_msgTypes[43] + mi := &file_base_v1_service_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2753,7 +2945,7 @@ func (x *AttributeReadResponse) String() string { func (*AttributeReadResponse) ProtoMessage() {} func (x *AttributeReadResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[43] + mi := &file_base_v1_service_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2766,7 +2958,7 @@ func (x *AttributeReadResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributeReadResponse.ProtoReflect.Descriptor instead. func (*AttributeReadResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{43} + return file_base_v1_service_proto_rawDescGZIP(), []int{46} } func (x *AttributeReadResponse) GetAttributes() []*Attribute { @@ -2799,7 +2991,7 @@ type DataDeleteRequest struct { func (x *DataDeleteRequest) Reset() { *x = DataDeleteRequest{} - mi := &file_base_v1_service_proto_msgTypes[44] + mi := &file_base_v1_service_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2811,7 +3003,7 @@ func (x *DataDeleteRequest) String() string { func (*DataDeleteRequest) ProtoMessage() {} func (x *DataDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[44] + mi := &file_base_v1_service_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2824,7 +3016,7 @@ func (x *DataDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DataDeleteRequest.ProtoReflect.Descriptor instead. func (*DataDeleteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{44} + return file_base_v1_service_proto_rawDescGZIP(), []int{47} } func (x *DataDeleteRequest) GetTenantId() string { @@ -2860,7 +3052,7 @@ type DataDeleteResponse struct { func (x *DataDeleteResponse) Reset() { *x = DataDeleteResponse{} - mi := &file_base_v1_service_proto_msgTypes[45] + mi := &file_base_v1_service_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2872,7 +3064,7 @@ func (x *DataDeleteResponse) String() string { func (*DataDeleteResponse) ProtoMessage() {} func (x *DataDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[45] + mi := &file_base_v1_service_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2885,7 +3077,7 @@ func (x *DataDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DataDeleteResponse.ProtoReflect.Descriptor instead. func (*DataDeleteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{45} + return file_base_v1_service_proto_rawDescGZIP(), []int{48} } func (x *DataDeleteResponse) GetSnapToken() string { @@ -2906,7 +3098,7 @@ type RelationshipDeleteRequest struct { func (x *RelationshipDeleteRequest) Reset() { *x = RelationshipDeleteRequest{} - mi := &file_base_v1_service_proto_msgTypes[46] + mi := &file_base_v1_service_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2918,7 +3110,7 @@ func (x *RelationshipDeleteRequest) String() string { func (*RelationshipDeleteRequest) ProtoMessage() {} func (x *RelationshipDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[46] + mi := &file_base_v1_service_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2931,7 +3123,7 @@ func (x *RelationshipDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipDeleteRequest.ProtoReflect.Descriptor instead. func (*RelationshipDeleteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{46} + return file_base_v1_service_proto_rawDescGZIP(), []int{49} } func (x *RelationshipDeleteRequest) GetTenantId() string { @@ -2958,7 +3150,7 @@ type RelationshipDeleteResponse struct { func (x *RelationshipDeleteResponse) Reset() { *x = RelationshipDeleteResponse{} - mi := &file_base_v1_service_proto_msgTypes[47] + mi := &file_base_v1_service_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2970,7 +3162,7 @@ func (x *RelationshipDeleteResponse) String() string { func (*RelationshipDeleteResponse) ProtoMessage() {} func (x *RelationshipDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[47] + mi := &file_base_v1_service_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2983,7 +3175,7 @@ func (x *RelationshipDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RelationshipDeleteResponse.ProtoReflect.Descriptor instead. func (*RelationshipDeleteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{47} + return file_base_v1_service_proto_rawDescGZIP(), []int{50} } func (x *RelationshipDeleteResponse) GetSnapToken() string { @@ -3008,7 +3200,7 @@ type BundleRunRequest struct { func (x *BundleRunRequest) Reset() { *x = BundleRunRequest{} - mi := &file_base_v1_service_proto_msgTypes[48] + mi := &file_base_v1_service_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3020,7 +3212,7 @@ func (x *BundleRunRequest) String() string { func (*BundleRunRequest) ProtoMessage() {} func (x *BundleRunRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[48] + mi := &file_base_v1_service_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3033,7 +3225,7 @@ func (x *BundleRunRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleRunRequest.ProtoReflect.Descriptor instead. func (*BundleRunRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{48} + return file_base_v1_service_proto_rawDescGZIP(), []int{51} } func (x *BundleRunRequest) GetTenantId() string { @@ -3068,7 +3260,7 @@ type BundleRunResponse struct { func (x *BundleRunResponse) Reset() { *x = BundleRunResponse{} - mi := &file_base_v1_service_proto_msgTypes[49] + mi := &file_base_v1_service_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3080,7 +3272,7 @@ func (x *BundleRunResponse) String() string { func (*BundleRunResponse) ProtoMessage() {} func (x *BundleRunResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[49] + mi := &file_base_v1_service_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3093,7 +3285,7 @@ func (x *BundleRunResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleRunResponse.ProtoReflect.Descriptor instead. func (*BundleRunResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{49} + return file_base_v1_service_proto_rawDescGZIP(), []int{52} } func (x *BundleRunResponse) GetSnapToken() string { @@ -3115,7 +3307,7 @@ type BundleWriteRequest struct { func (x *BundleWriteRequest) Reset() { *x = BundleWriteRequest{} - mi := &file_base_v1_service_proto_msgTypes[50] + mi := &file_base_v1_service_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3127,7 +3319,7 @@ func (x *BundleWriteRequest) String() string { func (*BundleWriteRequest) ProtoMessage() {} func (x *BundleWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[50] + mi := &file_base_v1_service_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3140,7 +3332,7 @@ func (x *BundleWriteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleWriteRequest.ProtoReflect.Descriptor instead. func (*BundleWriteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{50} + return file_base_v1_service_proto_rawDescGZIP(), []int{53} } func (x *BundleWriteRequest) GetTenantId() string { @@ -3168,7 +3360,7 @@ type BundleWriteResponse struct { func (x *BundleWriteResponse) Reset() { *x = BundleWriteResponse{} - mi := &file_base_v1_service_proto_msgTypes[51] + mi := &file_base_v1_service_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3180,7 +3372,7 @@ func (x *BundleWriteResponse) String() string { func (*BundleWriteResponse) ProtoMessage() {} func (x *BundleWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[51] + mi := &file_base_v1_service_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3193,7 +3385,7 @@ func (x *BundleWriteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleWriteResponse.ProtoReflect.Descriptor instead. func (*BundleWriteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{51} + return file_base_v1_service_proto_rawDescGZIP(), []int{54} } func (x *BundleWriteResponse) GetNames() []string { @@ -3213,7 +3405,7 @@ type BundleReadRequest struct { func (x *BundleReadRequest) Reset() { *x = BundleReadRequest{} - mi := &file_base_v1_service_proto_msgTypes[52] + mi := &file_base_v1_service_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3225,7 +3417,7 @@ func (x *BundleReadRequest) String() string { func (*BundleReadRequest) ProtoMessage() {} func (x *BundleReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[52] + mi := &file_base_v1_service_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3238,7 +3430,7 @@ func (x *BundleReadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleReadRequest.ProtoReflect.Descriptor instead. func (*BundleReadRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{52} + return file_base_v1_service_proto_rawDescGZIP(), []int{55} } func (x *BundleReadRequest) GetTenantId() string { @@ -3264,7 +3456,7 @@ type BundleReadResponse struct { func (x *BundleReadResponse) Reset() { *x = BundleReadResponse{} - mi := &file_base_v1_service_proto_msgTypes[53] + mi := &file_base_v1_service_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3276,7 +3468,7 @@ func (x *BundleReadResponse) String() string { func (*BundleReadResponse) ProtoMessage() {} func (x *BundleReadResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[53] + mi := &file_base_v1_service_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3289,7 +3481,7 @@ func (x *BundleReadResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleReadResponse.ProtoReflect.Descriptor instead. func (*BundleReadResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{53} + return file_base_v1_service_proto_rawDescGZIP(), []int{56} } func (x *BundleReadResponse) GetBundle() *DataBundle { @@ -3311,7 +3503,7 @@ type BundleDeleteRequest struct { func (x *BundleDeleteRequest) Reset() { *x = BundleDeleteRequest{} - mi := &file_base_v1_service_proto_msgTypes[54] + mi := &file_base_v1_service_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3323,7 +3515,7 @@ func (x *BundleDeleteRequest) String() string { func (*BundleDeleteRequest) ProtoMessage() {} func (x *BundleDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[54] + mi := &file_base_v1_service_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3336,7 +3528,7 @@ func (x *BundleDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleDeleteRequest.ProtoReflect.Descriptor instead. func (*BundleDeleteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{54} + return file_base_v1_service_proto_rawDescGZIP(), []int{57} } func (x *BundleDeleteRequest) GetTenantId() string { @@ -3362,7 +3554,7 @@ type BundleDeleteResponse struct { func (x *BundleDeleteResponse) Reset() { *x = BundleDeleteResponse{} - mi := &file_base_v1_service_proto_msgTypes[55] + mi := &file_base_v1_service_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3374,7 +3566,7 @@ func (x *BundleDeleteResponse) String() string { func (*BundleDeleteResponse) ProtoMessage() {} func (x *BundleDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[55] + mi := &file_base_v1_service_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3387,7 +3579,7 @@ func (x *BundleDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BundleDeleteResponse.ProtoReflect.Descriptor instead. func (*BundleDeleteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{55} + return file_base_v1_service_proto_rawDescGZIP(), []int{58} } func (x *BundleDeleteResponse) GetName() string { @@ -3410,7 +3602,7 @@ type TenantCreateRequest struct { func (x *TenantCreateRequest) Reset() { *x = TenantCreateRequest{} - mi := &file_base_v1_service_proto_msgTypes[56] + mi := &file_base_v1_service_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3422,7 +3614,7 @@ func (x *TenantCreateRequest) String() string { func (*TenantCreateRequest) ProtoMessage() {} func (x *TenantCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[56] + mi := &file_base_v1_service_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3435,7 +3627,7 @@ func (x *TenantCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantCreateRequest.ProtoReflect.Descriptor instead. func (*TenantCreateRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{56} + return file_base_v1_service_proto_rawDescGZIP(), []int{59} } func (x *TenantCreateRequest) GetId() string { @@ -3463,7 +3655,7 @@ type TenantCreateResponse struct { func (x *TenantCreateResponse) Reset() { *x = TenantCreateResponse{} - mi := &file_base_v1_service_proto_msgTypes[57] + mi := &file_base_v1_service_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3475,7 +3667,7 @@ func (x *TenantCreateResponse) String() string { func (*TenantCreateResponse) ProtoMessage() {} func (x *TenantCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[57] + mi := &file_base_v1_service_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3488,7 +3680,7 @@ func (x *TenantCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantCreateResponse.ProtoReflect.Descriptor instead. func (*TenantCreateResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{57} + return file_base_v1_service_proto_rawDescGZIP(), []int{60} } func (x *TenantCreateResponse) GetTenant() *Tenant { @@ -3509,7 +3701,7 @@ type TenantDeleteRequest struct { func (x *TenantDeleteRequest) Reset() { *x = TenantDeleteRequest{} - mi := &file_base_v1_service_proto_msgTypes[58] + mi := &file_base_v1_service_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3521,7 +3713,7 @@ func (x *TenantDeleteRequest) String() string { func (*TenantDeleteRequest) ProtoMessage() {} func (x *TenantDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[58] + mi := &file_base_v1_service_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3534,7 +3726,7 @@ func (x *TenantDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantDeleteRequest.ProtoReflect.Descriptor instead. func (*TenantDeleteRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{58} + return file_base_v1_service_proto_rawDescGZIP(), []int{61} } func (x *TenantDeleteRequest) GetId() string { @@ -3555,7 +3747,7 @@ type TenantDeleteResponse struct { func (x *TenantDeleteResponse) Reset() { *x = TenantDeleteResponse{} - mi := &file_base_v1_service_proto_msgTypes[59] + mi := &file_base_v1_service_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3567,7 +3759,7 @@ func (x *TenantDeleteResponse) String() string { func (*TenantDeleteResponse) ProtoMessage() {} func (x *TenantDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[59] + mi := &file_base_v1_service_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3580,7 +3772,7 @@ func (x *TenantDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantDeleteResponse.ProtoReflect.Descriptor instead. func (*TenantDeleteResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{59} + return file_base_v1_service_proto_rawDescGZIP(), []int{62} } func (x *TenantDeleteResponse) GetTenantId() string { @@ -3605,7 +3797,7 @@ type TenantListRequest struct { func (x *TenantListRequest) Reset() { *x = TenantListRequest{} - mi := &file_base_v1_service_proto_msgTypes[60] + mi := &file_base_v1_service_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3617,7 +3809,7 @@ func (x *TenantListRequest) String() string { func (*TenantListRequest) ProtoMessage() {} func (x *TenantListRequest) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[60] + mi := &file_base_v1_service_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3630,7 +3822,7 @@ func (x *TenantListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantListRequest.ProtoReflect.Descriptor instead. func (*TenantListRequest) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{60} + return file_base_v1_service_proto_rawDescGZIP(), []int{63} } func (x *TenantListRequest) GetPageSize() uint32 { @@ -3660,7 +3852,7 @@ type TenantListResponse struct { func (x *TenantListResponse) Reset() { *x = TenantListResponse{} - mi := &file_base_v1_service_proto_msgTypes[61] + mi := &file_base_v1_service_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3672,7 +3864,7 @@ func (x *TenantListResponse) String() string { func (*TenantListResponse) ProtoMessage() {} func (x *TenantListResponse) ProtoReflect() protoreflect.Message { - mi := &file_base_v1_service_proto_msgTypes[61] + mi := &file_base_v1_service_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3685,7 +3877,7 @@ func (x *TenantListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantListResponse.ProtoReflect.Descriptor instead. func (*TenantListResponse) Descriptor() ([]byte, []int) { - return file_base_v1_service_proto_rawDescGZIP(), []int{61} + return file_base_v1_service_proto_rawDescGZIP(), []int{64} } func (x *TenantListResponse) GetTenants() []*Tenant { @@ -3727,7 +3919,22 @@ const file_base_v1_service_proto_rawDesc = "" + "\x03can\x18\x01 \x01(\x0e2\x14.base.v1.CheckResultR\x03can\x12D\n" + "\bmetadata\x18\x02 \x01(\v2(.base.v1.PermissionCheckResponseMetadataR\bmetadata\"C\n" + "\x1fPermissionCheckResponseMetadata\x12 \n" + - "\vcheck_count\x18\x01 \x01(\x05R\vcheck_count\"\xe5\x04\n" + + "\vcheck_count\x18\x01 \x01(\x05R\vcheck_count\"\x94\x02\n" + + "\x1ePermissionBulkCheckRequestItem\x12D\n" + + "\x06entity\x18\x01 \x01(\v2\x0f.base.v1.EntityB\x1b\x92A\x10J\x0e\"repository:1\"\xfaB\x05\x8a\x01\x02\x10\x01R\x06entity\x12v\n" + + "\n" + + "permission\x18\x02 \x01(\tBV\x92A624The action the user wants to perform on the resource\xfaB\x1ar\x18(@2\x11^[a-zA-Z_]{1,64}$\xd0\x01\x00R\n" + + "permission\x124\n" + + "\asubject\x18\x03 \x01(\v2\x10.base.v1.SubjectB\b\xfaB\x05\x8a\x01\x02\x10\x01R\asubject\"\xdb\x05\n" + + "\x1aPermissionBulkCheckRequest\x12\xaa\x02\n" + + "\ttenant_id\x18\x01 \x01(\tB\x8b\x02\x92A\xd9\x012\xd6\x01Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant t1 for this field. Required, and must match the pattern \\“[a-zA-Z0-9-,]+\\“, max 64 bytes.\xfaB+r)(\x80\x012!^([a-zA-Z0-9_\\-@\\.:+]{1,128}|\\*)$\xd0\x01\x00R\ttenant_id\x12M\n" + + "\bmetadata\x18\x02 \x01(\v2'.base.v1.PermissionCheckRequestMetadataB\b\xfaB\x05\x8a\x01\x02\x10\x01R\bmetadata\x12I\n" + + "\x05items\x18\x03 \x03(\v2'.base.v1.PermissionBulkCheckRequestItemB\n" + + "\xfaB\a\x92\x01\x04\b\x01\x10dR\x05items\x12\xc4\x01\n" + + "\acontext\x18\x04 \x01(\v2\x10.base.v1.ContextB\x97\x01\x92A\x93\x012\x90\x01Contextual data that can be dynamically added to permission check requests. See details on [Contextual Data](../../operations/contextual-tuples)R\acontext\x12/\n" + + "\targuments\x18\x05 \x03(\v2\x11.base.v1.ArgumentR\targuments\"Y\n" + + "\x1bPermissionBulkCheckResponse\x12:\n" + + "\aresults\x18\x01 \x03(\v2 .base.v1.PermissionCheckResponseR\aresults\"\xe5\x04\n" + "\x17PermissionExpandRequest\x12\xaa\x02\n" + "\ttenant_id\x18\x01 \x01(\tB\x8b\x02\x92A\xd9\x012\xd6\x01Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant t1 for this field. Required, and must match the pattern \\“[a-zA-Z0-9-,]+\\“, max 64 bytes.\xfaB+r)(\x80\x012!^([a-zA-Z0-9_\\-@\\.:+]{1,128}|\\*)$\xd0\x01\x00R\ttenant_id\x12N\n" + "\bmetadata\x18\x02 \x01(\v2(.base.v1.PermissionExpandRequestMetadataB\b\xfaB\x05\x8a\x01\x02\x10\x01R\bmetadata\x121\n" + @@ -3982,7 +4189,7 @@ const file_base_v1_service_proto_rawDesc = "" + "\x10continuous_token\x18\x02 \x01(\tB\b\xfaB\x05r\x03\xd0\x01\x01R\x10continuous_token\"k\n" + "\x12TenantListResponse\x12)\n" + "\atenants\x18\x01 \x03(\v2\x0f.base.v1.TenantR\atenants\x12*\n" + - "\x10continuous_token\x18\x02 \x01(\tR\x10continuous_token2\x93L\n" + + "\x10continuous_token\x18\x02 \x01(\tR\x10continuous_token2\xafN\n" + "\n" + "Permission\x12\xe8\r\n" + "\x05Check\x12\x1f.base.v1.PermissionCheckRequest\x1a .base.v1.PermissionCheckResponse\"\x9b\r\x92A\xe3\f\n" + @@ -4071,7 +4278,10 @@ const file_base_v1_service_proto_rawDesc = "" + " \"id\": \"1\",\n" + " \"relation\": \"\"\n" + " }\n" + - "}'\x82\xd3\xe4\x93\x02.:\x01*\")/v1/tenants/{tenant_id}/permissions/check\x12\xb4\t\n" + + "}'\x82\xd3\xe4\x93\x02.:\x01*\")/v1/tenants/{tenant_id}/permissions/check\x12\x99\x02\n" + + "\tBulkCheck\x12#.base.v1.PermissionBulkCheckRequest\x1a$.base.v1.PermissionBulkCheckResponse\"\xc0\x01\x92A\x83\x01\n" + + "\n" + + "Permission\x12\x0ebulk check api\x1aMCheck multiple permissions in a single request. Maximum 100 requests allowed.*\x16permissions.bulk-check\x82\xd3\xe4\x93\x023:\x01*\"./v1/tenants/{tenant_id}/permissions/bulk-check\x12\xb4\t\n" + "\x06Expand\x12 .base.v1.PermissionExpandRequest\x1a!.base.v1.PermissionExpandResponse\"\xe4\b\x92A\xab\b\n" + "\n" + "Permission\x12\n" + @@ -5379,208 +5589,220 @@ func file_base_v1_service_proto_rawDescGZIP() []byte { return file_base_v1_service_proto_rawDescData } -var file_base_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 67) +var file_base_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 70) var file_base_v1_service_proto_goTypes = []any{ (*PermissionCheckRequest)(nil), // 0: base.v1.PermissionCheckRequest (*PermissionCheckRequestMetadata)(nil), // 1: base.v1.PermissionCheckRequestMetadata (*PermissionCheckResponse)(nil), // 2: base.v1.PermissionCheckResponse (*PermissionCheckResponseMetadata)(nil), // 3: base.v1.PermissionCheckResponseMetadata - (*PermissionExpandRequest)(nil), // 4: base.v1.PermissionExpandRequest - (*PermissionExpandRequestMetadata)(nil), // 5: base.v1.PermissionExpandRequestMetadata - (*PermissionExpandResponse)(nil), // 6: base.v1.PermissionExpandResponse - (*PermissionLookupEntityRequest)(nil), // 7: base.v1.PermissionLookupEntityRequest - (*PermissionLookupEntityRequestMetadata)(nil), // 8: base.v1.PermissionLookupEntityRequestMetadata - (*PermissionLookupEntityResponse)(nil), // 9: base.v1.PermissionLookupEntityResponse - (*PermissionLookupEntityStreamResponse)(nil), // 10: base.v1.PermissionLookupEntityStreamResponse - (*PermissionEntityFilterRequest)(nil), // 11: base.v1.PermissionEntityFilterRequest - (*PermissionEntityFilterRequestMetadata)(nil), // 12: base.v1.PermissionEntityFilterRequestMetadata - (*PermissionLookupSubjectRequest)(nil), // 13: base.v1.PermissionLookupSubjectRequest - (*PermissionLookupSubjectRequestMetadata)(nil), // 14: base.v1.PermissionLookupSubjectRequestMetadata - (*PermissionLookupSubjectResponse)(nil), // 15: base.v1.PermissionLookupSubjectResponse - (*PermissionSubjectPermissionRequest)(nil), // 16: base.v1.PermissionSubjectPermissionRequest - (*PermissionSubjectPermissionRequestMetadata)(nil), // 17: base.v1.PermissionSubjectPermissionRequestMetadata - (*PermissionSubjectPermissionResponse)(nil), // 18: base.v1.PermissionSubjectPermissionResponse - (*WatchRequest)(nil), // 19: base.v1.WatchRequest - (*WatchResponse)(nil), // 20: base.v1.WatchResponse - (*SchemaWriteRequest)(nil), // 21: base.v1.SchemaWriteRequest - (*SchemaWriteResponse)(nil), // 22: base.v1.SchemaWriteResponse - (*SchemaPartialWriteRequest)(nil), // 23: base.v1.SchemaPartialWriteRequest - (*SchemaPartialWriteRequestMetadata)(nil), // 24: base.v1.SchemaPartialWriteRequestMetadata - (*SchemaPartialWriteResponse)(nil), // 25: base.v1.SchemaPartialWriteResponse - (*SchemaReadRequest)(nil), // 26: base.v1.SchemaReadRequest - (*SchemaReadRequestMetadata)(nil), // 27: base.v1.SchemaReadRequestMetadata - (*SchemaReadResponse)(nil), // 28: base.v1.SchemaReadResponse - (*SchemaListRequest)(nil), // 29: base.v1.SchemaListRequest - (*SchemaListResponse)(nil), // 30: base.v1.SchemaListResponse - (*SchemaList)(nil), // 31: base.v1.SchemaList - (*DataWriteRequest)(nil), // 32: base.v1.DataWriteRequest - (*DataWriteRequestMetadata)(nil), // 33: base.v1.DataWriteRequestMetadata - (*DataWriteResponse)(nil), // 34: base.v1.DataWriteResponse - (*RelationshipWriteRequest)(nil), // 35: base.v1.RelationshipWriteRequest - (*RelationshipWriteRequestMetadata)(nil), // 36: base.v1.RelationshipWriteRequestMetadata - (*RelationshipWriteResponse)(nil), // 37: base.v1.RelationshipWriteResponse - (*RelationshipReadRequest)(nil), // 38: base.v1.RelationshipReadRequest - (*RelationshipReadRequestMetadata)(nil), // 39: base.v1.RelationshipReadRequestMetadata - (*RelationshipReadResponse)(nil), // 40: base.v1.RelationshipReadResponse - (*AttributeReadRequest)(nil), // 41: base.v1.AttributeReadRequest - (*AttributeReadRequestMetadata)(nil), // 42: base.v1.AttributeReadRequestMetadata - (*AttributeReadResponse)(nil), // 43: base.v1.AttributeReadResponse - (*DataDeleteRequest)(nil), // 44: base.v1.DataDeleteRequest - (*DataDeleteResponse)(nil), // 45: base.v1.DataDeleteResponse - (*RelationshipDeleteRequest)(nil), // 46: base.v1.RelationshipDeleteRequest - (*RelationshipDeleteResponse)(nil), // 47: base.v1.RelationshipDeleteResponse - (*BundleRunRequest)(nil), // 48: base.v1.BundleRunRequest - (*BundleRunResponse)(nil), // 49: base.v1.BundleRunResponse - (*BundleWriteRequest)(nil), // 50: base.v1.BundleWriteRequest - (*BundleWriteResponse)(nil), // 51: base.v1.BundleWriteResponse - (*BundleReadRequest)(nil), // 52: base.v1.BundleReadRequest - (*BundleReadResponse)(nil), // 53: base.v1.BundleReadResponse - (*BundleDeleteRequest)(nil), // 54: base.v1.BundleDeleteRequest - (*BundleDeleteResponse)(nil), // 55: base.v1.BundleDeleteResponse - (*TenantCreateRequest)(nil), // 56: base.v1.TenantCreateRequest - (*TenantCreateResponse)(nil), // 57: base.v1.TenantCreateResponse - (*TenantDeleteRequest)(nil), // 58: base.v1.TenantDeleteRequest - (*TenantDeleteResponse)(nil), // 59: base.v1.TenantDeleteResponse - (*TenantListRequest)(nil), // 60: base.v1.TenantListRequest - (*TenantListResponse)(nil), // 61: base.v1.TenantListResponse - nil, // 62: base.v1.PermissionLookupEntityRequest.ScopeEntry - nil, // 63: base.v1.PermissionEntityFilterRequest.ScopeEntry - nil, // 64: base.v1.PermissionSubjectPermissionResponse.ResultsEntry - nil, // 65: base.v1.SchemaPartialWriteRequest.PartialsEntry - nil, // 66: base.v1.BundleRunRequest.ArgumentsEntry - (*Entity)(nil), // 67: base.v1.Entity - (*Subject)(nil), // 68: base.v1.Subject - (*Context)(nil), // 69: base.v1.Context - (*Argument)(nil), // 70: base.v1.Argument - (CheckResult)(0), // 71: base.v1.CheckResult - (*Expand)(nil), // 72: base.v1.Expand - (*Entrance)(nil), // 73: base.v1.Entrance - (*RelationReference)(nil), // 74: base.v1.RelationReference - (*DataChanges)(nil), // 75: base.v1.DataChanges - (*SchemaDefinition)(nil), // 76: base.v1.SchemaDefinition - (*Tuple)(nil), // 77: base.v1.Tuple - (*Attribute)(nil), // 78: base.v1.Attribute - (*TupleFilter)(nil), // 79: base.v1.TupleFilter - (*AttributeFilter)(nil), // 80: base.v1.AttributeFilter - (*DataBundle)(nil), // 81: base.v1.DataBundle - (*Tenant)(nil), // 82: base.v1.Tenant - (*StringArrayValue)(nil), // 83: base.v1.StringArrayValue - (*Partials)(nil), // 84: base.v1.Partials + (*PermissionBulkCheckRequestItem)(nil), // 4: base.v1.PermissionBulkCheckRequestItem + (*PermissionBulkCheckRequest)(nil), // 5: base.v1.PermissionBulkCheckRequest + (*PermissionBulkCheckResponse)(nil), // 6: base.v1.PermissionBulkCheckResponse + (*PermissionExpandRequest)(nil), // 7: base.v1.PermissionExpandRequest + (*PermissionExpandRequestMetadata)(nil), // 8: base.v1.PermissionExpandRequestMetadata + (*PermissionExpandResponse)(nil), // 9: base.v1.PermissionExpandResponse + (*PermissionLookupEntityRequest)(nil), // 10: base.v1.PermissionLookupEntityRequest + (*PermissionLookupEntityRequestMetadata)(nil), // 11: base.v1.PermissionLookupEntityRequestMetadata + (*PermissionLookupEntityResponse)(nil), // 12: base.v1.PermissionLookupEntityResponse + (*PermissionLookupEntityStreamResponse)(nil), // 13: base.v1.PermissionLookupEntityStreamResponse + (*PermissionEntityFilterRequest)(nil), // 14: base.v1.PermissionEntityFilterRequest + (*PermissionEntityFilterRequestMetadata)(nil), // 15: base.v1.PermissionEntityFilterRequestMetadata + (*PermissionLookupSubjectRequest)(nil), // 16: base.v1.PermissionLookupSubjectRequest + (*PermissionLookupSubjectRequestMetadata)(nil), // 17: base.v1.PermissionLookupSubjectRequestMetadata + (*PermissionLookupSubjectResponse)(nil), // 18: base.v1.PermissionLookupSubjectResponse + (*PermissionSubjectPermissionRequest)(nil), // 19: base.v1.PermissionSubjectPermissionRequest + (*PermissionSubjectPermissionRequestMetadata)(nil), // 20: base.v1.PermissionSubjectPermissionRequestMetadata + (*PermissionSubjectPermissionResponse)(nil), // 21: base.v1.PermissionSubjectPermissionResponse + (*WatchRequest)(nil), // 22: base.v1.WatchRequest + (*WatchResponse)(nil), // 23: base.v1.WatchResponse + (*SchemaWriteRequest)(nil), // 24: base.v1.SchemaWriteRequest + (*SchemaWriteResponse)(nil), // 25: base.v1.SchemaWriteResponse + (*SchemaPartialWriteRequest)(nil), // 26: base.v1.SchemaPartialWriteRequest + (*SchemaPartialWriteRequestMetadata)(nil), // 27: base.v1.SchemaPartialWriteRequestMetadata + (*SchemaPartialWriteResponse)(nil), // 28: base.v1.SchemaPartialWriteResponse + (*SchemaReadRequest)(nil), // 29: base.v1.SchemaReadRequest + (*SchemaReadRequestMetadata)(nil), // 30: base.v1.SchemaReadRequestMetadata + (*SchemaReadResponse)(nil), // 31: base.v1.SchemaReadResponse + (*SchemaListRequest)(nil), // 32: base.v1.SchemaListRequest + (*SchemaListResponse)(nil), // 33: base.v1.SchemaListResponse + (*SchemaList)(nil), // 34: base.v1.SchemaList + (*DataWriteRequest)(nil), // 35: base.v1.DataWriteRequest + (*DataWriteRequestMetadata)(nil), // 36: base.v1.DataWriteRequestMetadata + (*DataWriteResponse)(nil), // 37: base.v1.DataWriteResponse + (*RelationshipWriteRequest)(nil), // 38: base.v1.RelationshipWriteRequest + (*RelationshipWriteRequestMetadata)(nil), // 39: base.v1.RelationshipWriteRequestMetadata + (*RelationshipWriteResponse)(nil), // 40: base.v1.RelationshipWriteResponse + (*RelationshipReadRequest)(nil), // 41: base.v1.RelationshipReadRequest + (*RelationshipReadRequestMetadata)(nil), // 42: base.v1.RelationshipReadRequestMetadata + (*RelationshipReadResponse)(nil), // 43: base.v1.RelationshipReadResponse + (*AttributeReadRequest)(nil), // 44: base.v1.AttributeReadRequest + (*AttributeReadRequestMetadata)(nil), // 45: base.v1.AttributeReadRequestMetadata + (*AttributeReadResponse)(nil), // 46: base.v1.AttributeReadResponse + (*DataDeleteRequest)(nil), // 47: base.v1.DataDeleteRequest + (*DataDeleteResponse)(nil), // 48: base.v1.DataDeleteResponse + (*RelationshipDeleteRequest)(nil), // 49: base.v1.RelationshipDeleteRequest + (*RelationshipDeleteResponse)(nil), // 50: base.v1.RelationshipDeleteResponse + (*BundleRunRequest)(nil), // 51: base.v1.BundleRunRequest + (*BundleRunResponse)(nil), // 52: base.v1.BundleRunResponse + (*BundleWriteRequest)(nil), // 53: base.v1.BundleWriteRequest + (*BundleWriteResponse)(nil), // 54: base.v1.BundleWriteResponse + (*BundleReadRequest)(nil), // 55: base.v1.BundleReadRequest + (*BundleReadResponse)(nil), // 56: base.v1.BundleReadResponse + (*BundleDeleteRequest)(nil), // 57: base.v1.BundleDeleteRequest + (*BundleDeleteResponse)(nil), // 58: base.v1.BundleDeleteResponse + (*TenantCreateRequest)(nil), // 59: base.v1.TenantCreateRequest + (*TenantCreateResponse)(nil), // 60: base.v1.TenantCreateResponse + (*TenantDeleteRequest)(nil), // 61: base.v1.TenantDeleteRequest + (*TenantDeleteResponse)(nil), // 62: base.v1.TenantDeleteResponse + (*TenantListRequest)(nil), // 63: base.v1.TenantListRequest + (*TenantListResponse)(nil), // 64: base.v1.TenantListResponse + nil, // 65: base.v1.PermissionLookupEntityRequest.ScopeEntry + nil, // 66: base.v1.PermissionEntityFilterRequest.ScopeEntry + nil, // 67: base.v1.PermissionSubjectPermissionResponse.ResultsEntry + nil, // 68: base.v1.SchemaPartialWriteRequest.PartialsEntry + nil, // 69: base.v1.BundleRunRequest.ArgumentsEntry + (*Entity)(nil), // 70: base.v1.Entity + (*Subject)(nil), // 71: base.v1.Subject + (*Context)(nil), // 72: base.v1.Context + (*Argument)(nil), // 73: base.v1.Argument + (CheckResult)(0), // 74: base.v1.CheckResult + (*Expand)(nil), // 75: base.v1.Expand + (*Entrance)(nil), // 76: base.v1.Entrance + (*RelationReference)(nil), // 77: base.v1.RelationReference + (*DataChanges)(nil), // 78: base.v1.DataChanges + (*SchemaDefinition)(nil), // 79: base.v1.SchemaDefinition + (*Tuple)(nil), // 80: base.v1.Tuple + (*Attribute)(nil), // 81: base.v1.Attribute + (*TupleFilter)(nil), // 82: base.v1.TupleFilter + (*AttributeFilter)(nil), // 83: base.v1.AttributeFilter + (*DataBundle)(nil), // 84: base.v1.DataBundle + (*Tenant)(nil), // 85: base.v1.Tenant + (*StringArrayValue)(nil), // 86: base.v1.StringArrayValue + (*Partials)(nil), // 87: base.v1.Partials } var file_base_v1_service_proto_depIdxs = []int32{ 1, // 0: base.v1.PermissionCheckRequest.metadata:type_name -> base.v1.PermissionCheckRequestMetadata - 67, // 1: base.v1.PermissionCheckRequest.entity:type_name -> base.v1.Entity - 68, // 2: base.v1.PermissionCheckRequest.subject:type_name -> base.v1.Subject - 69, // 3: base.v1.PermissionCheckRequest.context:type_name -> base.v1.Context - 70, // 4: base.v1.PermissionCheckRequest.arguments:type_name -> base.v1.Argument - 71, // 5: base.v1.PermissionCheckResponse.can:type_name -> base.v1.CheckResult + 70, // 1: base.v1.PermissionCheckRequest.entity:type_name -> base.v1.Entity + 71, // 2: base.v1.PermissionCheckRequest.subject:type_name -> base.v1.Subject + 72, // 3: base.v1.PermissionCheckRequest.context:type_name -> base.v1.Context + 73, // 4: base.v1.PermissionCheckRequest.arguments:type_name -> base.v1.Argument + 74, // 5: base.v1.PermissionCheckResponse.can:type_name -> base.v1.CheckResult 3, // 6: base.v1.PermissionCheckResponse.metadata:type_name -> base.v1.PermissionCheckResponseMetadata - 5, // 7: base.v1.PermissionExpandRequest.metadata:type_name -> base.v1.PermissionExpandRequestMetadata - 67, // 8: base.v1.PermissionExpandRequest.entity:type_name -> base.v1.Entity - 69, // 9: base.v1.PermissionExpandRequest.context:type_name -> base.v1.Context - 70, // 10: base.v1.PermissionExpandRequest.arguments:type_name -> base.v1.Argument - 72, // 11: base.v1.PermissionExpandResponse.tree:type_name -> base.v1.Expand - 8, // 12: base.v1.PermissionLookupEntityRequest.metadata:type_name -> base.v1.PermissionLookupEntityRequestMetadata - 68, // 13: base.v1.PermissionLookupEntityRequest.subject:type_name -> base.v1.Subject - 69, // 14: base.v1.PermissionLookupEntityRequest.context:type_name -> base.v1.Context - 62, // 15: base.v1.PermissionLookupEntityRequest.scope:type_name -> base.v1.PermissionLookupEntityRequest.ScopeEntry - 12, // 16: base.v1.PermissionEntityFilterRequest.metadata:type_name -> base.v1.PermissionEntityFilterRequestMetadata - 73, // 17: base.v1.PermissionEntityFilterRequest.entrance:type_name -> base.v1.Entrance - 68, // 18: base.v1.PermissionEntityFilterRequest.subject:type_name -> base.v1.Subject - 69, // 19: base.v1.PermissionEntityFilterRequest.context:type_name -> base.v1.Context - 63, // 20: base.v1.PermissionEntityFilterRequest.scope:type_name -> base.v1.PermissionEntityFilterRequest.ScopeEntry - 14, // 21: base.v1.PermissionLookupSubjectRequest.metadata:type_name -> base.v1.PermissionLookupSubjectRequestMetadata - 67, // 22: base.v1.PermissionLookupSubjectRequest.entity:type_name -> base.v1.Entity - 74, // 23: base.v1.PermissionLookupSubjectRequest.subject_reference:type_name -> base.v1.RelationReference - 69, // 24: base.v1.PermissionLookupSubjectRequest.context:type_name -> base.v1.Context - 70, // 25: base.v1.PermissionLookupSubjectRequest.arguments:type_name -> base.v1.Argument - 17, // 26: base.v1.PermissionSubjectPermissionRequest.metadata:type_name -> base.v1.PermissionSubjectPermissionRequestMetadata - 67, // 27: base.v1.PermissionSubjectPermissionRequest.entity:type_name -> base.v1.Entity - 68, // 28: base.v1.PermissionSubjectPermissionRequest.subject:type_name -> base.v1.Subject - 69, // 29: base.v1.PermissionSubjectPermissionRequest.context:type_name -> base.v1.Context - 64, // 30: base.v1.PermissionSubjectPermissionResponse.results:type_name -> base.v1.PermissionSubjectPermissionResponse.ResultsEntry - 75, // 31: base.v1.WatchResponse.changes:type_name -> base.v1.DataChanges - 24, // 32: base.v1.SchemaPartialWriteRequest.metadata:type_name -> base.v1.SchemaPartialWriteRequestMetadata - 65, // 33: base.v1.SchemaPartialWriteRequest.partials:type_name -> base.v1.SchemaPartialWriteRequest.PartialsEntry - 27, // 34: base.v1.SchemaReadRequest.metadata:type_name -> base.v1.SchemaReadRequestMetadata - 76, // 35: base.v1.SchemaReadResponse.schema:type_name -> base.v1.SchemaDefinition - 31, // 36: base.v1.SchemaListResponse.schemas:type_name -> base.v1.SchemaList - 33, // 37: base.v1.DataWriteRequest.metadata:type_name -> base.v1.DataWriteRequestMetadata - 77, // 38: base.v1.DataWriteRequest.tuples:type_name -> base.v1.Tuple - 78, // 39: base.v1.DataWriteRequest.attributes:type_name -> base.v1.Attribute - 36, // 40: base.v1.RelationshipWriteRequest.metadata:type_name -> base.v1.RelationshipWriteRequestMetadata - 77, // 41: base.v1.RelationshipWriteRequest.tuples:type_name -> base.v1.Tuple - 39, // 42: base.v1.RelationshipReadRequest.metadata:type_name -> base.v1.RelationshipReadRequestMetadata - 79, // 43: base.v1.RelationshipReadRequest.filter:type_name -> base.v1.TupleFilter - 77, // 44: base.v1.RelationshipReadResponse.tuples:type_name -> base.v1.Tuple - 42, // 45: base.v1.AttributeReadRequest.metadata:type_name -> base.v1.AttributeReadRequestMetadata - 80, // 46: base.v1.AttributeReadRequest.filter:type_name -> base.v1.AttributeFilter - 78, // 47: base.v1.AttributeReadResponse.attributes:type_name -> base.v1.Attribute - 79, // 48: base.v1.DataDeleteRequest.tuple_filter:type_name -> base.v1.TupleFilter - 80, // 49: base.v1.DataDeleteRequest.attribute_filter:type_name -> base.v1.AttributeFilter - 79, // 50: base.v1.RelationshipDeleteRequest.filter:type_name -> base.v1.TupleFilter - 66, // 51: base.v1.BundleRunRequest.arguments:type_name -> base.v1.BundleRunRequest.ArgumentsEntry - 81, // 52: base.v1.BundleWriteRequest.bundles:type_name -> base.v1.DataBundle - 81, // 53: base.v1.BundleReadResponse.bundle:type_name -> base.v1.DataBundle - 82, // 54: base.v1.TenantCreateResponse.tenant:type_name -> base.v1.Tenant - 82, // 55: base.v1.TenantListResponse.tenants:type_name -> base.v1.Tenant - 83, // 56: base.v1.PermissionLookupEntityRequest.ScopeEntry.value:type_name -> base.v1.StringArrayValue - 83, // 57: base.v1.PermissionEntityFilterRequest.ScopeEntry.value:type_name -> base.v1.StringArrayValue - 71, // 58: base.v1.PermissionSubjectPermissionResponse.ResultsEntry.value:type_name -> base.v1.CheckResult - 84, // 59: base.v1.SchemaPartialWriteRequest.PartialsEntry.value:type_name -> base.v1.Partials - 0, // 60: base.v1.Permission.Check:input_type -> base.v1.PermissionCheckRequest - 4, // 61: base.v1.Permission.Expand:input_type -> base.v1.PermissionExpandRequest - 7, // 62: base.v1.Permission.LookupEntity:input_type -> base.v1.PermissionLookupEntityRequest - 7, // 63: base.v1.Permission.LookupEntityStream:input_type -> base.v1.PermissionLookupEntityRequest - 13, // 64: base.v1.Permission.LookupSubject:input_type -> base.v1.PermissionLookupSubjectRequest - 16, // 65: base.v1.Permission.SubjectPermission:input_type -> base.v1.PermissionSubjectPermissionRequest - 19, // 66: base.v1.Watch.Watch:input_type -> base.v1.WatchRequest - 21, // 67: base.v1.Schema.Write:input_type -> base.v1.SchemaWriteRequest - 23, // 68: base.v1.Schema.PartialWrite:input_type -> base.v1.SchemaPartialWriteRequest - 26, // 69: base.v1.Schema.Read:input_type -> base.v1.SchemaReadRequest - 29, // 70: base.v1.Schema.List:input_type -> base.v1.SchemaListRequest - 32, // 71: base.v1.Data.Write:input_type -> base.v1.DataWriteRequest - 35, // 72: base.v1.Data.WriteRelationships:input_type -> base.v1.RelationshipWriteRequest - 38, // 73: base.v1.Data.ReadRelationships:input_type -> base.v1.RelationshipReadRequest - 41, // 74: base.v1.Data.ReadAttributes:input_type -> base.v1.AttributeReadRequest - 44, // 75: base.v1.Data.Delete:input_type -> base.v1.DataDeleteRequest - 46, // 76: base.v1.Data.DeleteRelationships:input_type -> base.v1.RelationshipDeleteRequest - 48, // 77: base.v1.Data.RunBundle:input_type -> base.v1.BundleRunRequest - 50, // 78: base.v1.Bundle.Write:input_type -> base.v1.BundleWriteRequest - 52, // 79: base.v1.Bundle.Read:input_type -> base.v1.BundleReadRequest - 54, // 80: base.v1.Bundle.Delete:input_type -> base.v1.BundleDeleteRequest - 56, // 81: base.v1.Tenancy.Create:input_type -> base.v1.TenantCreateRequest - 58, // 82: base.v1.Tenancy.Delete:input_type -> base.v1.TenantDeleteRequest - 60, // 83: base.v1.Tenancy.List:input_type -> base.v1.TenantListRequest - 2, // 84: base.v1.Permission.Check:output_type -> base.v1.PermissionCheckResponse - 6, // 85: base.v1.Permission.Expand:output_type -> base.v1.PermissionExpandResponse - 9, // 86: base.v1.Permission.LookupEntity:output_type -> base.v1.PermissionLookupEntityResponse - 10, // 87: base.v1.Permission.LookupEntityStream:output_type -> base.v1.PermissionLookupEntityStreamResponse - 15, // 88: base.v1.Permission.LookupSubject:output_type -> base.v1.PermissionLookupSubjectResponse - 18, // 89: base.v1.Permission.SubjectPermission:output_type -> base.v1.PermissionSubjectPermissionResponse - 20, // 90: base.v1.Watch.Watch:output_type -> base.v1.WatchResponse - 22, // 91: base.v1.Schema.Write:output_type -> base.v1.SchemaWriteResponse - 25, // 92: base.v1.Schema.PartialWrite:output_type -> base.v1.SchemaPartialWriteResponse - 28, // 93: base.v1.Schema.Read:output_type -> base.v1.SchemaReadResponse - 30, // 94: base.v1.Schema.List:output_type -> base.v1.SchemaListResponse - 34, // 95: base.v1.Data.Write:output_type -> base.v1.DataWriteResponse - 37, // 96: base.v1.Data.WriteRelationships:output_type -> base.v1.RelationshipWriteResponse - 40, // 97: base.v1.Data.ReadRelationships:output_type -> base.v1.RelationshipReadResponse - 43, // 98: base.v1.Data.ReadAttributes:output_type -> base.v1.AttributeReadResponse - 45, // 99: base.v1.Data.Delete:output_type -> base.v1.DataDeleteResponse - 47, // 100: base.v1.Data.DeleteRelationships:output_type -> base.v1.RelationshipDeleteResponse - 49, // 101: base.v1.Data.RunBundle:output_type -> base.v1.BundleRunResponse - 51, // 102: base.v1.Bundle.Write:output_type -> base.v1.BundleWriteResponse - 53, // 103: base.v1.Bundle.Read:output_type -> base.v1.BundleReadResponse - 55, // 104: base.v1.Bundle.Delete:output_type -> base.v1.BundleDeleteResponse - 57, // 105: base.v1.Tenancy.Create:output_type -> base.v1.TenantCreateResponse - 59, // 106: base.v1.Tenancy.Delete:output_type -> base.v1.TenantDeleteResponse - 61, // 107: base.v1.Tenancy.List:output_type -> base.v1.TenantListResponse - 84, // [84:108] is the sub-list for method output_type - 60, // [60:84] is the sub-list for method input_type - 60, // [60:60] is the sub-list for extension type_name - 60, // [60:60] is the sub-list for extension extendee - 0, // [0:60] is the sub-list for field type_name + 70, // 7: base.v1.PermissionBulkCheckRequestItem.entity:type_name -> base.v1.Entity + 71, // 8: base.v1.PermissionBulkCheckRequestItem.subject:type_name -> base.v1.Subject + 1, // 9: base.v1.PermissionBulkCheckRequest.metadata:type_name -> base.v1.PermissionCheckRequestMetadata + 4, // 10: base.v1.PermissionBulkCheckRequest.items:type_name -> base.v1.PermissionBulkCheckRequestItem + 72, // 11: base.v1.PermissionBulkCheckRequest.context:type_name -> base.v1.Context + 73, // 12: base.v1.PermissionBulkCheckRequest.arguments:type_name -> base.v1.Argument + 2, // 13: base.v1.PermissionBulkCheckResponse.results:type_name -> base.v1.PermissionCheckResponse + 8, // 14: base.v1.PermissionExpandRequest.metadata:type_name -> base.v1.PermissionExpandRequestMetadata + 70, // 15: base.v1.PermissionExpandRequest.entity:type_name -> base.v1.Entity + 72, // 16: base.v1.PermissionExpandRequest.context:type_name -> base.v1.Context + 73, // 17: base.v1.PermissionExpandRequest.arguments:type_name -> base.v1.Argument + 75, // 18: base.v1.PermissionExpandResponse.tree:type_name -> base.v1.Expand + 11, // 19: base.v1.PermissionLookupEntityRequest.metadata:type_name -> base.v1.PermissionLookupEntityRequestMetadata + 71, // 20: base.v1.PermissionLookupEntityRequest.subject:type_name -> base.v1.Subject + 72, // 21: base.v1.PermissionLookupEntityRequest.context:type_name -> base.v1.Context + 65, // 22: base.v1.PermissionLookupEntityRequest.scope:type_name -> base.v1.PermissionLookupEntityRequest.ScopeEntry + 15, // 23: base.v1.PermissionEntityFilterRequest.metadata:type_name -> base.v1.PermissionEntityFilterRequestMetadata + 76, // 24: base.v1.PermissionEntityFilterRequest.entrance:type_name -> base.v1.Entrance + 71, // 25: base.v1.PermissionEntityFilterRequest.subject:type_name -> base.v1.Subject + 72, // 26: base.v1.PermissionEntityFilterRequest.context:type_name -> base.v1.Context + 66, // 27: base.v1.PermissionEntityFilterRequest.scope:type_name -> base.v1.PermissionEntityFilterRequest.ScopeEntry + 17, // 28: base.v1.PermissionLookupSubjectRequest.metadata:type_name -> base.v1.PermissionLookupSubjectRequestMetadata + 70, // 29: base.v1.PermissionLookupSubjectRequest.entity:type_name -> base.v1.Entity + 77, // 30: base.v1.PermissionLookupSubjectRequest.subject_reference:type_name -> base.v1.RelationReference + 72, // 31: base.v1.PermissionLookupSubjectRequest.context:type_name -> base.v1.Context + 73, // 32: base.v1.PermissionLookupSubjectRequest.arguments:type_name -> base.v1.Argument + 20, // 33: base.v1.PermissionSubjectPermissionRequest.metadata:type_name -> base.v1.PermissionSubjectPermissionRequestMetadata + 70, // 34: base.v1.PermissionSubjectPermissionRequest.entity:type_name -> base.v1.Entity + 71, // 35: base.v1.PermissionSubjectPermissionRequest.subject:type_name -> base.v1.Subject + 72, // 36: base.v1.PermissionSubjectPermissionRequest.context:type_name -> base.v1.Context + 67, // 37: base.v1.PermissionSubjectPermissionResponse.results:type_name -> base.v1.PermissionSubjectPermissionResponse.ResultsEntry + 78, // 38: base.v1.WatchResponse.changes:type_name -> base.v1.DataChanges + 27, // 39: base.v1.SchemaPartialWriteRequest.metadata:type_name -> base.v1.SchemaPartialWriteRequestMetadata + 68, // 40: base.v1.SchemaPartialWriteRequest.partials:type_name -> base.v1.SchemaPartialWriteRequest.PartialsEntry + 30, // 41: base.v1.SchemaReadRequest.metadata:type_name -> base.v1.SchemaReadRequestMetadata + 79, // 42: base.v1.SchemaReadResponse.schema:type_name -> base.v1.SchemaDefinition + 34, // 43: base.v1.SchemaListResponse.schemas:type_name -> base.v1.SchemaList + 36, // 44: base.v1.DataWriteRequest.metadata:type_name -> base.v1.DataWriteRequestMetadata + 80, // 45: base.v1.DataWriteRequest.tuples:type_name -> base.v1.Tuple + 81, // 46: base.v1.DataWriteRequest.attributes:type_name -> base.v1.Attribute + 39, // 47: base.v1.RelationshipWriteRequest.metadata:type_name -> base.v1.RelationshipWriteRequestMetadata + 80, // 48: base.v1.RelationshipWriteRequest.tuples:type_name -> base.v1.Tuple + 42, // 49: base.v1.RelationshipReadRequest.metadata:type_name -> base.v1.RelationshipReadRequestMetadata + 82, // 50: base.v1.RelationshipReadRequest.filter:type_name -> base.v1.TupleFilter + 80, // 51: base.v1.RelationshipReadResponse.tuples:type_name -> base.v1.Tuple + 45, // 52: base.v1.AttributeReadRequest.metadata:type_name -> base.v1.AttributeReadRequestMetadata + 83, // 53: base.v1.AttributeReadRequest.filter:type_name -> base.v1.AttributeFilter + 81, // 54: base.v1.AttributeReadResponse.attributes:type_name -> base.v1.Attribute + 82, // 55: base.v1.DataDeleteRequest.tuple_filter:type_name -> base.v1.TupleFilter + 83, // 56: base.v1.DataDeleteRequest.attribute_filter:type_name -> base.v1.AttributeFilter + 82, // 57: base.v1.RelationshipDeleteRequest.filter:type_name -> base.v1.TupleFilter + 69, // 58: base.v1.BundleRunRequest.arguments:type_name -> base.v1.BundleRunRequest.ArgumentsEntry + 84, // 59: base.v1.BundleWriteRequest.bundles:type_name -> base.v1.DataBundle + 84, // 60: base.v1.BundleReadResponse.bundle:type_name -> base.v1.DataBundle + 85, // 61: base.v1.TenantCreateResponse.tenant:type_name -> base.v1.Tenant + 85, // 62: base.v1.TenantListResponse.tenants:type_name -> base.v1.Tenant + 86, // 63: base.v1.PermissionLookupEntityRequest.ScopeEntry.value:type_name -> base.v1.StringArrayValue + 86, // 64: base.v1.PermissionEntityFilterRequest.ScopeEntry.value:type_name -> base.v1.StringArrayValue + 74, // 65: base.v1.PermissionSubjectPermissionResponse.ResultsEntry.value:type_name -> base.v1.CheckResult + 87, // 66: base.v1.SchemaPartialWriteRequest.PartialsEntry.value:type_name -> base.v1.Partials + 0, // 67: base.v1.Permission.Check:input_type -> base.v1.PermissionCheckRequest + 5, // 68: base.v1.Permission.BulkCheck:input_type -> base.v1.PermissionBulkCheckRequest + 7, // 69: base.v1.Permission.Expand:input_type -> base.v1.PermissionExpandRequest + 10, // 70: base.v1.Permission.LookupEntity:input_type -> base.v1.PermissionLookupEntityRequest + 10, // 71: base.v1.Permission.LookupEntityStream:input_type -> base.v1.PermissionLookupEntityRequest + 16, // 72: base.v1.Permission.LookupSubject:input_type -> base.v1.PermissionLookupSubjectRequest + 19, // 73: base.v1.Permission.SubjectPermission:input_type -> base.v1.PermissionSubjectPermissionRequest + 22, // 74: base.v1.Watch.Watch:input_type -> base.v1.WatchRequest + 24, // 75: base.v1.Schema.Write:input_type -> base.v1.SchemaWriteRequest + 26, // 76: base.v1.Schema.PartialWrite:input_type -> base.v1.SchemaPartialWriteRequest + 29, // 77: base.v1.Schema.Read:input_type -> base.v1.SchemaReadRequest + 32, // 78: base.v1.Schema.List:input_type -> base.v1.SchemaListRequest + 35, // 79: base.v1.Data.Write:input_type -> base.v1.DataWriteRequest + 38, // 80: base.v1.Data.WriteRelationships:input_type -> base.v1.RelationshipWriteRequest + 41, // 81: base.v1.Data.ReadRelationships:input_type -> base.v1.RelationshipReadRequest + 44, // 82: base.v1.Data.ReadAttributes:input_type -> base.v1.AttributeReadRequest + 47, // 83: base.v1.Data.Delete:input_type -> base.v1.DataDeleteRequest + 49, // 84: base.v1.Data.DeleteRelationships:input_type -> base.v1.RelationshipDeleteRequest + 51, // 85: base.v1.Data.RunBundle:input_type -> base.v1.BundleRunRequest + 53, // 86: base.v1.Bundle.Write:input_type -> base.v1.BundleWriteRequest + 55, // 87: base.v1.Bundle.Read:input_type -> base.v1.BundleReadRequest + 57, // 88: base.v1.Bundle.Delete:input_type -> base.v1.BundleDeleteRequest + 59, // 89: base.v1.Tenancy.Create:input_type -> base.v1.TenantCreateRequest + 61, // 90: base.v1.Tenancy.Delete:input_type -> base.v1.TenantDeleteRequest + 63, // 91: base.v1.Tenancy.List:input_type -> base.v1.TenantListRequest + 2, // 92: base.v1.Permission.Check:output_type -> base.v1.PermissionCheckResponse + 6, // 93: base.v1.Permission.BulkCheck:output_type -> base.v1.PermissionBulkCheckResponse + 9, // 94: base.v1.Permission.Expand:output_type -> base.v1.PermissionExpandResponse + 12, // 95: base.v1.Permission.LookupEntity:output_type -> base.v1.PermissionLookupEntityResponse + 13, // 96: base.v1.Permission.LookupEntityStream:output_type -> base.v1.PermissionLookupEntityStreamResponse + 18, // 97: base.v1.Permission.LookupSubject:output_type -> base.v1.PermissionLookupSubjectResponse + 21, // 98: base.v1.Permission.SubjectPermission:output_type -> base.v1.PermissionSubjectPermissionResponse + 23, // 99: base.v1.Watch.Watch:output_type -> base.v1.WatchResponse + 25, // 100: base.v1.Schema.Write:output_type -> base.v1.SchemaWriteResponse + 28, // 101: base.v1.Schema.PartialWrite:output_type -> base.v1.SchemaPartialWriteResponse + 31, // 102: base.v1.Schema.Read:output_type -> base.v1.SchemaReadResponse + 33, // 103: base.v1.Schema.List:output_type -> base.v1.SchemaListResponse + 37, // 104: base.v1.Data.Write:output_type -> base.v1.DataWriteResponse + 40, // 105: base.v1.Data.WriteRelationships:output_type -> base.v1.RelationshipWriteResponse + 43, // 106: base.v1.Data.ReadRelationships:output_type -> base.v1.RelationshipReadResponse + 46, // 107: base.v1.Data.ReadAttributes:output_type -> base.v1.AttributeReadResponse + 48, // 108: base.v1.Data.Delete:output_type -> base.v1.DataDeleteResponse + 50, // 109: base.v1.Data.DeleteRelationships:output_type -> base.v1.RelationshipDeleteResponse + 52, // 110: base.v1.Data.RunBundle:output_type -> base.v1.BundleRunResponse + 54, // 111: base.v1.Bundle.Write:output_type -> base.v1.BundleWriteResponse + 56, // 112: base.v1.Bundle.Read:output_type -> base.v1.BundleReadResponse + 58, // 113: base.v1.Bundle.Delete:output_type -> base.v1.BundleDeleteResponse + 60, // 114: base.v1.Tenancy.Create:output_type -> base.v1.TenantCreateResponse + 62, // 115: base.v1.Tenancy.Delete:output_type -> base.v1.TenantDeleteResponse + 64, // 116: base.v1.Tenancy.List:output_type -> base.v1.TenantListResponse + 92, // [92:117] is the sub-list for method output_type + 67, // [67:92] is the sub-list for method input_type + 67, // [67:67] is the sub-list for extension type_name + 67, // [67:67] is the sub-list for extension extendee + 0, // [0:67] is the sub-list for field type_name } func init() { file_base_v1_service_proto_init() } @@ -5595,7 +5817,7 @@ func file_base_v1_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_base_v1_service_proto_rawDesc), len(file_base_v1_service_proto_rawDesc)), NumEnums: 0, - NumMessages: 67, + NumMessages: 70, NumExtensions: 0, NumServices: 6, }, diff --git a/pkg/pb/base/v1/service.pb.gw.go b/pkg/pb/base/v1/service.pb.gw.go index 8d3c1ce13..d3ea58a5f 100644 --- a/pkg/pb/base/v1/service.pb.gw.go +++ b/pkg/pb/base/v1/service.pb.gw.go @@ -80,6 +80,51 @@ func local_request_Permission_Check_0(ctx context.Context, marshaler runtime.Mar return msg, metadata, err } +func request_Permission_BulkCheck_0(ctx context.Context, marshaler runtime.Marshaler, client PermissionClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq PermissionBulkCheckRequest + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["tenant_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "tenant_id") + } + protoReq.TenantId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "tenant_id", err) + } + msg, err := client.BulkCheck(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Permission_BulkCheck_0(ctx context.Context, marshaler runtime.Marshaler, server PermissionServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq PermissionBulkCheckRequest + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["tenant_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "tenant_id") + } + protoReq.TenantId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "tenant_id", err) + } + msg, err := server.BulkCheck(ctx, &protoReq) + return msg, metadata, err +} + func request_Permission_Expand_0(ctx context.Context, marshaler runtime.Marshaler, client PermissionClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( protoReq PermissionExpandRequest @@ -1073,6 +1118,26 @@ func RegisterPermissionHandlerServer(ctx context.Context, mux *runtime.ServeMux, } forward_Permission_Check_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_Permission_BulkCheck_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/base.v1.Permission/BulkCheck", runtime.WithHTTPPathPattern("/v1/tenants/{tenant_id}/permissions/bulk-check")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Permission_BulkCheck_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Permission_BulkCheck_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_Permission_Expand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1613,6 +1678,23 @@ func RegisterPermissionHandlerClient(ctx context.Context, mux *runtime.ServeMux, } forward_Permission_Check_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_Permission_BulkCheck_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/base.v1.Permission/BulkCheck", runtime.WithHTTPPathPattern("/v1/tenants/{tenant_id}/permissions/bulk-check")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Permission_BulkCheck_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Permission_BulkCheck_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_Permission_Expand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1703,6 +1785,7 @@ func RegisterPermissionHandlerClient(ctx context.Context, mux *runtime.ServeMux, var ( pattern_Permission_Check_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1", "tenants", "tenant_id", "permissions", "check"}, "")) + pattern_Permission_BulkCheck_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1", "tenants", "tenant_id", "permissions", "bulk-check"}, "")) pattern_Permission_Expand_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1", "tenants", "tenant_id", "permissions", "expand"}, "")) pattern_Permission_LookupEntity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1", "tenants", "tenant_id", "permissions", "lookup-entity"}, "")) pattern_Permission_LookupEntityStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"v1", "tenants", "tenant_id", "permissions", "lookup-entity-stream"}, "")) @@ -1712,6 +1795,7 @@ var ( var ( forward_Permission_Check_0 = runtime.ForwardResponseMessage + forward_Permission_BulkCheck_0 = runtime.ForwardResponseMessage forward_Permission_Expand_0 = runtime.ForwardResponseMessage forward_Permission_LookupEntity_0 = runtime.ForwardResponseMessage forward_Permission_LookupEntityStream_0 = runtime.ForwardResponseStream diff --git a/pkg/pb/base/v1/service.pb.validate.go b/pkg/pb/base/v1/service.pb.validate.go index f9b69b0a8..8fd794109 100644 --- a/pkg/pb/base/v1/service.pb.validate.go +++ b/pkg/pb/base/v1/service.pb.validate.go @@ -724,6 +724,624 @@ var _ interface { ErrorName() string } = PermissionCheckResponseMetadataValidationError{} +// Validate checks the field values on PermissionBulkCheckRequestItem with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *PermissionBulkCheckRequestItem) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on PermissionBulkCheckRequestItem with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// PermissionBulkCheckRequestItemMultiError, or nil if none found. +func (m *PermissionBulkCheckRequestItem) ValidateAll() error { + return m.validate(true) +} + +func (m *PermissionBulkCheckRequestItem) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if m.GetEntity() == nil { + err := PermissionBulkCheckRequestItemValidationError{ + field: "Entity", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetEntity()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermissionBulkCheckRequestItemValidationError{ + field: "Entity", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermissionBulkCheckRequestItemValidationError{ + field: "Entity", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEntity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermissionBulkCheckRequestItemValidationError{ + field: "Entity", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetPermission()) > 64 { + err := PermissionBulkCheckRequestItemValidationError{ + field: "Permission", + reason: "value length must be at most 64 bytes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if !_PermissionBulkCheckRequestItem_Permission_Pattern.MatchString(m.GetPermission()) { + err := PermissionBulkCheckRequestItemValidationError{ + field: "Permission", + reason: "value does not match regex pattern \"^[a-zA-Z_]{1,64}$\"", + } + if !all { + return err + } + errors = append(errors, err) + } + + if m.GetSubject() == nil { + err := PermissionBulkCheckRequestItemValidationError{ + field: "Subject", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetSubject()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermissionBulkCheckRequestItemValidationError{ + field: "Subject", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermissionBulkCheckRequestItemValidationError{ + field: "Subject", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSubject()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermissionBulkCheckRequestItemValidationError{ + field: "Subject", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return PermissionBulkCheckRequestItemMultiError(errors) + } + + return nil +} + +// PermissionBulkCheckRequestItemMultiError is an error wrapping multiple +// validation errors returned by PermissionBulkCheckRequestItem.ValidateAll() +// if the designated constraints aren't met. +type PermissionBulkCheckRequestItemMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m PermissionBulkCheckRequestItemMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m PermissionBulkCheckRequestItemMultiError) AllErrors() []error { return m } + +// PermissionBulkCheckRequestItemValidationError is the validation error +// returned by PermissionBulkCheckRequestItem.Validate if the designated +// constraints aren't met. +type PermissionBulkCheckRequestItemValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PermissionBulkCheckRequestItemValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PermissionBulkCheckRequestItemValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PermissionBulkCheckRequestItemValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PermissionBulkCheckRequestItemValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PermissionBulkCheckRequestItemValidationError) ErrorName() string { + return "PermissionBulkCheckRequestItemValidationError" +} + +// Error satisfies the builtin error interface +func (e PermissionBulkCheckRequestItemValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPermissionBulkCheckRequestItem.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PermissionBulkCheckRequestItemValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PermissionBulkCheckRequestItemValidationError{} + +var _PermissionBulkCheckRequestItem_Permission_Pattern = regexp.MustCompile("^[a-zA-Z_]{1,64}$") + +// Validate checks the field values on PermissionBulkCheckRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *PermissionBulkCheckRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on PermissionBulkCheckRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// PermissionBulkCheckRequestMultiError, or nil if none found. +func (m *PermissionBulkCheckRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *PermissionBulkCheckRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(m.GetTenantId()) > 128 { + err := PermissionBulkCheckRequestValidationError{ + field: "TenantId", + reason: "value length must be at most 128 bytes", + } + if !all { + return err + } + errors = append(errors, err) + } + + if !_PermissionBulkCheckRequest_TenantId_Pattern.MatchString(m.GetTenantId()) { + err := PermissionBulkCheckRequestValidationError{ + field: "TenantId", + reason: "value does not match regex pattern \"^([a-zA-Z0-9_\\\\-@\\\\.:+]{1,128}|\\\\*)$\"", + } + if !all { + return err + } + errors = append(errors, err) + } + + if m.GetMetadata() == nil { + err := PermissionBulkCheckRequestValidationError{ + field: "Metadata", + reason: "value is required", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetMetadata()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMetadata()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermissionBulkCheckRequestValidationError{ + field: "Metadata", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if l := len(m.GetItems()); l < 1 || l > 100 { + err := PermissionBulkCheckRequestValidationError{ + field: "Items", + reason: "value must contain between 1 and 100 items, inclusive", + } + if !all { + return err + } + errors = append(errors, err) + } + + for idx, item := range m.GetItems() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: fmt.Sprintf("Items[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: fmt.Sprintf("Items[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermissionBulkCheckRequestValidationError{ + field: fmt.Sprintf("Items[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if all { + switch v := interface{}(m.GetContext()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: "Context", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: "Context", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetContext()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermissionBulkCheckRequestValidationError{ + field: "Context", + reason: "embedded message failed validation", + cause: err, + } + } + } + + for idx, item := range m.GetArguments() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: fmt.Sprintf("Arguments[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermissionBulkCheckRequestValidationError{ + field: fmt.Sprintf("Arguments[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermissionBulkCheckRequestValidationError{ + field: fmt.Sprintf("Arguments[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return PermissionBulkCheckRequestMultiError(errors) + } + + return nil +} + +// PermissionBulkCheckRequestMultiError is an error wrapping multiple +// validation errors returned by PermissionBulkCheckRequest.ValidateAll() if +// the designated constraints aren't met. +type PermissionBulkCheckRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m PermissionBulkCheckRequestMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m PermissionBulkCheckRequestMultiError) AllErrors() []error { return m } + +// PermissionBulkCheckRequestValidationError is the validation error returned +// by PermissionBulkCheckRequest.Validate if the designated constraints aren't met. +type PermissionBulkCheckRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PermissionBulkCheckRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PermissionBulkCheckRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PermissionBulkCheckRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PermissionBulkCheckRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PermissionBulkCheckRequestValidationError) ErrorName() string { + return "PermissionBulkCheckRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e PermissionBulkCheckRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPermissionBulkCheckRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PermissionBulkCheckRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PermissionBulkCheckRequestValidationError{} + +var _PermissionBulkCheckRequest_TenantId_Pattern = regexp.MustCompile("^([a-zA-Z0-9_\\-@\\.:+]{1,128}|\\*)$") + +// Validate checks the field values on PermissionBulkCheckResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *PermissionBulkCheckResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on PermissionBulkCheckResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// PermissionBulkCheckResponseMultiError, or nil if none found. +func (m *PermissionBulkCheckResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *PermissionBulkCheckResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetResults() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermissionBulkCheckResponseValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermissionBulkCheckResponseValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermissionBulkCheckResponseValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return PermissionBulkCheckResponseMultiError(errors) + } + + return nil +} + +// PermissionBulkCheckResponseMultiError is an error wrapping multiple +// validation errors returned by PermissionBulkCheckResponse.ValidateAll() if +// the designated constraints aren't met. +type PermissionBulkCheckResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m PermissionBulkCheckResponseMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m PermissionBulkCheckResponseMultiError) AllErrors() []error { return m } + +// PermissionBulkCheckResponseValidationError is the validation error returned +// by PermissionBulkCheckResponse.Validate if the designated constraints +// aren't met. +type PermissionBulkCheckResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PermissionBulkCheckResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PermissionBulkCheckResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PermissionBulkCheckResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PermissionBulkCheckResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PermissionBulkCheckResponseValidationError) ErrorName() string { + return "PermissionBulkCheckResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e PermissionBulkCheckResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPermissionBulkCheckResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PermissionBulkCheckResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PermissionBulkCheckResponseValidationError{} + // Validate checks the field values on PermissionExpandRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. diff --git a/pkg/pb/base/v1/service_grpc.pb.go b/pkg/pb/base/v1/service_grpc.pb.go index 5d4c3779b..a2dd326db 100644 --- a/pkg/pb/base/v1/service_grpc.pb.go +++ b/pkg/pb/base/v1/service_grpc.pb.go @@ -20,6 +20,7 @@ const _ = grpc.SupportPackageIsVersion9 const ( Permission_Check_FullMethodName = "/base.v1.Permission/Check" + Permission_BulkCheck_FullMethodName = "/base.v1.Permission/BulkCheck" Permission_Expand_FullMethodName = "/base.v1.Permission/Expand" Permission_LookupEntity_FullMethodName = "/base.v1.Permission/LookupEntity" Permission_LookupEntityStream_FullMethodName = "/base.v1.Permission/LookupEntityStream" @@ -38,6 +39,10 @@ type PermissionClient interface { // It is used to determine whether a specific user has permission to perform an action on a resource. // For example, "Can the user 1 push to repository 1?" Check(ctx context.Context, in *PermissionCheckRequest, opts ...grpc.CallOption) (*PermissionCheckResponse, error) + // BulkCheck method receives a PermissionBulkCheckRequest containing multiple check requests + // and returns a PermissionBulkCheckResponse with results for each request. + // Maximum 100 requests can be processed in a single bulk operation. + BulkCheck(ctx context.Context, in *PermissionBulkCheckRequest, opts ...grpc.CallOption) (*PermissionBulkCheckResponse, error) // Expand method receives a PermissionExpandRequest and returns a PermissionExpandResponse. // It expands relationships according to the schema provided. Expand(ctx context.Context, in *PermissionExpandRequest, opts ...grpc.CallOption) (*PermissionExpandResponse, error) @@ -73,6 +78,16 @@ func (c *permissionClient) Check(ctx context.Context, in *PermissionCheckRequest return out, nil } +func (c *permissionClient) BulkCheck(ctx context.Context, in *PermissionBulkCheckRequest, opts ...grpc.CallOption) (*PermissionBulkCheckResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(PermissionBulkCheckResponse) + err := c.cc.Invoke(ctx, Permission_BulkCheck_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *permissionClient) Expand(ctx context.Context, in *PermissionExpandRequest, opts ...grpc.CallOption) (*PermissionExpandResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(PermissionExpandResponse) @@ -143,6 +158,10 @@ type PermissionServer interface { // It is used to determine whether a specific user has permission to perform an action on a resource. // For example, "Can the user 1 push to repository 1?" Check(context.Context, *PermissionCheckRequest) (*PermissionCheckResponse, error) + // BulkCheck method receives a PermissionBulkCheckRequest containing multiple check requests + // and returns a PermissionBulkCheckResponse with results for each request. + // Maximum 100 requests can be processed in a single bulk operation. + BulkCheck(context.Context, *PermissionBulkCheckRequest) (*PermissionBulkCheckResponse, error) // Expand method receives a PermissionExpandRequest and returns a PermissionExpandResponse. // It expands relationships according to the schema provided. Expand(context.Context, *PermissionExpandRequest) (*PermissionExpandResponse, error) @@ -171,6 +190,9 @@ type UnimplementedPermissionServer struct{} func (UnimplementedPermissionServer) Check(context.Context, *PermissionCheckRequest) (*PermissionCheckResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Check not implemented") } +func (UnimplementedPermissionServer) BulkCheck(context.Context, *PermissionBulkCheckRequest) (*PermissionBulkCheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BulkCheck not implemented") +} func (UnimplementedPermissionServer) Expand(context.Context, *PermissionExpandRequest) (*PermissionExpandResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Expand not implemented") } @@ -225,6 +247,24 @@ func _Permission_Check_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Permission_BulkCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PermissionBulkCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PermissionServer).BulkCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Permission_BulkCheck_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PermissionServer).BulkCheck(ctx, req.(*PermissionBulkCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Permission_Expand_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(PermissionExpandRequest) if err := dec(in); err != nil { @@ -319,6 +359,10 @@ var Permission_ServiceDesc = grpc.ServiceDesc{ MethodName: "Check", Handler: _Permission_Check_Handler, }, + { + MethodName: "BulkCheck", + Handler: _Permission_BulkCheck_Handler, + }, { MethodName: "Expand", Handler: _Permission_Expand_Handler, diff --git a/pkg/pb/base/v1/service_vtproto.pb.go b/pkg/pb/base/v1/service_vtproto.pb.go index 034b13e0b..dc5b6ef79 100644 --- a/pkg/pb/base/v1/service_vtproto.pb.go +++ b/pkg/pb/base/v1/service_vtproto.pb.go @@ -102,6 +102,81 @@ func (m *PermissionCheckResponseMetadata) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *PermissionBulkCheckRequestItem) CloneVT() *PermissionBulkCheckRequestItem { + if m == nil { + return (*PermissionBulkCheckRequestItem)(nil) + } + r := new(PermissionBulkCheckRequestItem) + r.Entity = m.Entity.CloneVT() + r.Permission = m.Permission + r.Subject = m.Subject.CloneVT() + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *PermissionBulkCheckRequestItem) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *PermissionBulkCheckRequest) CloneVT() *PermissionBulkCheckRequest { + if m == nil { + return (*PermissionBulkCheckRequest)(nil) + } + r := new(PermissionBulkCheckRequest) + r.TenantId = m.TenantId + r.Metadata = m.Metadata.CloneVT() + r.Context = m.Context.CloneVT() + if rhs := m.Items; rhs != nil { + tmpContainer := make([]*PermissionBulkCheckRequestItem, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.Items = tmpContainer + } + if rhs := m.Arguments; rhs != nil { + tmpContainer := make([]*Argument, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.Arguments = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *PermissionBulkCheckRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *PermissionBulkCheckResponse) CloneVT() *PermissionBulkCheckResponse { + if m == nil { + return (*PermissionBulkCheckResponse)(nil) + } + r := new(PermissionBulkCheckResponse) + if rhs := m.Results; rhs != nil { + tmpContainer := make([]*PermissionCheckResponse, len(rhs)) + for k, v := range rhs { + tmpContainer[k] = v.CloneVT() + } + r.Results = tmpContainer + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *PermissionBulkCheckResponse) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *PermissionExpandRequest) CloneVT() *PermissionExpandRequest { if m == nil { return (*PermissionExpandRequest)(nil) @@ -1387,6 +1462,123 @@ func (this *PermissionCheckResponseMetadata) EqualMessageVT(thatMsg proto.Messag } return this.EqualVT(that) } +func (this *PermissionBulkCheckRequestItem) EqualVT(that *PermissionBulkCheckRequestItem) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if !this.Entity.EqualVT(that.Entity) { + return false + } + if this.Permission != that.Permission { + return false + } + if !this.Subject.EqualVT(that.Subject) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *PermissionBulkCheckRequestItem) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*PermissionBulkCheckRequestItem) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *PermissionBulkCheckRequest) EqualVT(that *PermissionBulkCheckRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if this.TenantId != that.TenantId { + return false + } + if !this.Metadata.EqualVT(that.Metadata) { + return false + } + if len(this.Items) != len(that.Items) { + return false + } + for i, vx := range this.Items { + vy := that.Items[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &PermissionBulkCheckRequestItem{} + } + if q == nil { + q = &PermissionBulkCheckRequestItem{} + } + if !p.EqualVT(q) { + return false + } + } + } + if !this.Context.EqualVT(that.Context) { + return false + } + if len(this.Arguments) != len(that.Arguments) { + return false + } + for i, vx := range this.Arguments { + vy := that.Arguments[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &Argument{} + } + if q == nil { + q = &Argument{} + } + if !p.EqualVT(q) { + return false + } + } + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *PermissionBulkCheckRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*PermissionBulkCheckRequest) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *PermissionBulkCheckResponse) EqualVT(that *PermissionBulkCheckResponse) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if len(this.Results) != len(that.Results) { + return false + } + for i, vx := range this.Results { + vy := that.Results[i] + if p, q := vx, vy; p != q { + if p == nil { + p = &PermissionCheckResponse{} + } + if q == nil { + q = &PermissionCheckResponse{} + } + if !p.EqualVT(q) { + return false + } + } + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *PermissionBulkCheckResponse) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*PermissionBulkCheckResponse) + if !ok { + return false + } + return this.EqualVT(that) +} func (this *PermissionExpandRequest) EqualVT(that *PermissionExpandRequest) bool { if this == that { return true @@ -3193,7 +3385,7 @@ func (m *PermissionCheckResponseMetadata) MarshalToSizedBufferVT(dAtA []byte) (i return len(dAtA) - i, nil } -func (m *PermissionExpandRequest) MarshalVT() (dAtA []byte, err error) { +func (m *PermissionBulkCheckRequestItem) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -3206,12 +3398,12 @@ func (m *PermissionExpandRequest) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *PermissionExpandRequest) MarshalToVT(dAtA []byte) (int, error) { +func (m *PermissionBulkCheckRequestItem) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *PermissionExpandRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *PermissionBulkCheckRequestItem) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -3223,34 +3415,22 @@ func (m *PermissionExpandRequest) MarshalToSizedBufferVT(dAtA []byte) (int, erro i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } - if len(m.Arguments) > 0 { - for iNdEx := len(m.Arguments) - 1; iNdEx >= 0; iNdEx-- { - size, err := m.Arguments[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) - i-- - dAtA[i] = 0x32 - } - } - if m.Context != nil { - size, err := m.Context.MarshalToSizedBufferVT(dAtA[:i]) + if m.Subject != nil { + size, err := m.Subject.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { return 0, err } i -= size i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- - dAtA[i] = 0x2a + dAtA[i] = 0x1a } if len(m.Permission) > 0 { i -= len(m.Permission) copy(dAtA[i:], m.Permission) i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Permission))) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x12 } if m.Entity != nil { size, err := m.Entity.MarshalToSizedBufferVT(dAtA[:i]) @@ -3260,29 +3440,12 @@ func (m *PermissionExpandRequest) MarshalToSizedBufferVT(dAtA []byte) (int, erro i -= size i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- - dAtA[i] = 0x1a - } - if m.Metadata != nil { - size, err := m.Metadata.MarshalToSizedBufferVT(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) - i-- - dAtA[i] = 0x12 - } - if len(m.TenantId) > 0 { - i -= len(m.TenantId) - copy(dAtA[i:], m.TenantId) - i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TenantId))) - i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *PermissionExpandRequestMetadata) MarshalVT() (dAtA []byte, err error) { +func (m *PermissionBulkCheckRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -3295,12 +3458,12 @@ func (m *PermissionExpandRequestMetadata) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *PermissionExpandRequestMetadata) MarshalToVT(dAtA []byte) (int, error) { +func (m *PermissionBulkCheckRequest) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *PermissionExpandRequestMetadata) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *PermissionBulkCheckRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -3312,24 +3475,61 @@ func (m *PermissionExpandRequestMetadata) MarshalToSizedBufferVT(dAtA []byte) (i i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } - if len(m.SnapToken) > 0 { - i -= len(m.SnapToken) - copy(dAtA[i:], m.SnapToken) - i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SnapToken))) + if len(m.Arguments) > 0 { + for iNdEx := len(m.Arguments) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Arguments[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x2a + } + } + if m.Context != nil { + size, err := m.Context.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x22 + } + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Items[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + } + } + if m.Metadata != nil { + size, err := m.Metadata.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x12 } - if len(m.SchemaVersion) > 0 { - i -= len(m.SchemaVersion) - copy(dAtA[i:], m.SchemaVersion) - i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SchemaVersion))) + if len(m.TenantId) > 0 { + i -= len(m.TenantId) + copy(dAtA[i:], m.TenantId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TenantId))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *PermissionExpandResponse) MarshalVT() (dAtA []byte, err error) { +func (m *PermissionBulkCheckResponse) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -3342,12 +3542,12 @@ func (m *PermissionExpandResponse) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *PermissionExpandResponse) MarshalToVT(dAtA []byte) (int, error) { +func (m *PermissionBulkCheckResponse) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *PermissionExpandResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *PermissionBulkCheckResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -3359,8 +3559,189 @@ func (m *PermissionExpandResponse) MarshalToSizedBufferVT(dAtA []byte) (int, err i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } - if m.Tree != nil { - size, err := m.Tree.MarshalToSizedBufferVT(dAtA[:i]) + if len(m.Results) > 0 { + for iNdEx := len(m.Results) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Results[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *PermissionExpandRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PermissionExpandRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *PermissionExpandRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.Arguments) > 0 { + for iNdEx := len(m.Arguments) - 1; iNdEx >= 0; iNdEx-- { + size, err := m.Arguments[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x32 + } + } + if m.Context != nil { + size, err := m.Context.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x2a + } + if len(m.Permission) > 0 { + i -= len(m.Permission) + copy(dAtA[i:], m.Permission) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Permission))) + i-- + dAtA[i] = 0x22 + } + if m.Entity != nil { + size, err := m.Entity.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + } + if m.Metadata != nil { + size, err := m.Metadata.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x12 + } + if len(m.TenantId) > 0 { + i -= len(m.TenantId) + copy(dAtA[i:], m.TenantId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TenantId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PermissionExpandRequestMetadata) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PermissionExpandRequestMetadata) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *PermissionExpandRequestMetadata) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.SnapToken) > 0 { + i -= len(m.SnapToken) + copy(dAtA[i:], m.SnapToken) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SnapToken))) + i-- + dAtA[i] = 0x12 + } + if len(m.SchemaVersion) > 0 { + i -= len(m.SchemaVersion) + copy(dAtA[i:], m.SchemaVersion) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SchemaVersion))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PermissionExpandResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PermissionExpandResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *PermissionExpandResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Tree != nil { + size, err := m.Tree.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { return 0, err } @@ -6372,6 +6753,78 @@ func (m *PermissionCheckResponseMetadata) SizeVT() (n int) { return n } +func (m *PermissionBulkCheckRequestItem) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Entity != nil { + l = m.Entity.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Permission) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Subject != nil { + l = m.Subject.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + +func (m *PermissionBulkCheckRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TenantId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if m.Metadata != nil { + l = m.Metadata.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + if m.Context != nil { + l = m.Context.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + if len(m.Arguments) > 0 { + for _, e := range m.Arguments { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + +func (m *PermissionBulkCheckResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Results) > 0 { + for _, e := range m.Results { + l = e.SizeVT() + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + } + n += len(m.unknownFields) + return n +} + func (m *PermissionExpandRequest) SizeVT() (n int) { if m == nil { return 0 @@ -8157,6 +8610,469 @@ func (m *PermissionCheckResponseMetadata) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *PermissionBulkCheckRequestItem) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PermissionBulkCheckRequestItem: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PermissionBulkCheckRequestItem: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Entity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Entity == nil { + m.Entity = &Entity{} + } + if err := m.Entity.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Permission", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Permission = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subject", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Subject == nil { + m.Subject = &Subject{} + } + if err := m.Subject.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PermissionBulkCheckRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PermissionBulkCheckRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PermissionBulkCheckRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TenantId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TenantId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Metadata == nil { + m.Metadata = &PermissionCheckRequestMetadata{} + } + if err := m.Metadata.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, &PermissionBulkCheckRequestItem{}) + if err := m.Items[len(m.Items)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Context == nil { + m.Context = &Context{} + } + if err := m.Context.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Arguments", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Arguments = append(m.Arguments, &Argument{}) + if err := m.Arguments[len(m.Arguments)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PermissionBulkCheckResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PermissionBulkCheckResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PermissionBulkCheckResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Results", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Results = append(m.Results, &PermissionCheckResponse{}) + if err := m.Results[len(m.Results)-1].UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PermissionExpandRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/proto/base/v1/service.proto b/proto/base/v1/service.proto index 476aedaba..f8f2aaf73 100644 --- a/proto/base/v1/service.proto +++ b/proto/base/v1/service.proto @@ -150,6 +150,24 @@ service Permission { }; } + // BulkCheck method receives a PermissionBulkCheckRequest containing multiple check requests + // and returns a PermissionBulkCheckResponse with results for each request. + // Maximum 100 requests can be processed in a single bulk operation. + rpc BulkCheck(PermissionBulkCheckRequest) returns (PermissionBulkCheckResponse) { + // HTTP mapping for this method + option (google.api.http) = { + post: "/v1/tenants/{tenant_id}/permissions/bulk-check" + body: "*" + }; + // OpenAPI annotations for this method + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "bulk check api" + tags: ["Permission"] + operation_id: "permissions.bulk-check" + description: "Check multiple permissions in a single request. Maximum 100 requests allowed." + }; + } + // Expand method receives a PermissionExpandRequest and returns a PermissionExpandResponse. // It expands relationships according to the schema provided. rpc Expand(PermissionExpandRequest) returns (PermissionExpandResponse) { @@ -852,6 +870,76 @@ message PermissionCheckResponseMetadata { int32 check_count = 1 [json_name = "check_count"]; } +// BULK CHECK +message PermissionBulkCheckRequestItem { + // Entity on which the permission needs to be checked, required. + Entity entity = 1 [ + json_name = "entity", + (validate.rules).message.required = true, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {example: "\"repository:1\""} + ]; + + // Name of the permission or relation, required, must start with a letter and can include alphanumeric and underscore, max 64 bytes. + string permission = 2 [ + json_name = "permission", + (validate.rules).string = { + pattern: "^[a-zA-Z_]{1,64}$" + max_bytes: 64 + ignore_empty: false + }, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "The action the user wants to perform on the resource"} + ]; + + // Subject for which the permission needs to be checked, required. + Subject subject = 3 [ + json_name = "subject", + (validate.rules).message.required = true + ]; +} +// PermissionBulkCheckRequest is the request message for the BulkCheck method in the Permission service. +message PermissionBulkCheckRequest { + // Identifier of the tenant, required, and must match the pattern "[a-zA-Z0-9-,]+", max 64 bytes. + string tenant_id = 1 [ + json_name = "tenant_id", + (validate.rules).string = { + pattern: "^([a-zA-Z0-9_\\-@\\.:+]{1,128}|\\*)$" + max_bytes: 128 + ignore_empty: false + }, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant t1 for this field. Required, and must match the pattern \\“[a-zA-Z0-9-,]+\\“, max 64 bytes."} + ]; + + // Metadata associated with this request, required. + PermissionCheckRequestMetadata metadata = 2 [ + json_name = "metadata", + (validate.rules).message.required = true + ]; + + // List of permission check requests, maximum 100 items. + repeated PermissionBulkCheckRequestItem items = 3 [ + json_name = "items", + (validate.rules).repeated = { + min_items: 1 + max_items: 100 + } + ]; + + // Context associated with this request. + Context context = 4 [ + json_name = "context", + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "Contextual data that can be dynamically added to permission check requests. See details on [Contextual Data](../../operations/contextual-tuples)"} + ]; + + // Additional arguments associated with this request. + repeated Argument arguments = 5 [json_name = "arguments"]; +} + +// PermissionBulkCheckResponse is the response message for the BulkCheck method in the Permission service. +message PermissionBulkCheckResponse { + // List of permission check responses corresponding to each request. + repeated PermissionCheckResponse results = 1 [json_name = "results"]; +} + // EXPAND // PermissionExpandRequest is the request message for the Expand method in the Permission service.