Skip to content

Commit

Permalink
feat(authorization,grpc-sdk): CreateResourceAccessList viewName (#955)
Browse files Browse the repository at this point in the history
* feat(authorization): createResourceAccessList RPC return viewName

* feat(authorization): createResourceAccessList RPC accept viewName arg
  • Loading branch information
kon14 authored Feb 14, 2024
1 parent 589c100 commit 74a464e
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 9 deletions.
5 changes: 4 additions & 1 deletion libraries/grpc-sdk/src/modules/authorization/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
Relation,
Resource,
ResourceAccessListRequest,
ResourceAccessListResponse,
} from '../../protoUtils/index.js';
import { Empty } from '../../protoUtils/google/protobuf/empty.js';

Expand Down Expand Up @@ -77,7 +78,9 @@ export class Authorization extends ConduitModule<typeof AuthorizationDefinition>
return this.client!.getAllowedResources(data);
}

createResourceAccessList(data: ResourceAccessListRequest): Promise<unknown> {
createResourceAccessList(
data: ResourceAccessListRequest,
): Promise<ResourceAccessListResponse> {
return this.client!.createResourceAccessList(data);
}
}
11 changes: 8 additions & 3 deletions modules/authorization/src/Authorization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,9 +230,14 @@ export default class Authorization extends ManagedModule<Config> {
call: GrpcRequest<ResourceAccessListRequest>,
callback: GrpcResponse<Empty>,
) {
const { subject, action, resourceType } = call.request;
await this.permissionsController.createAccessList(subject, action, resourceType);
callback(null);
const { subject, action, resourceType, viewName: requestedViewName } = call.request;
const viewName = await this.permissionsController.createAccessList(
subject,
action,
resourceType,
requestedViewName,
);
callback(null, { viewName });
}

async can(call: GrpcRequest<PermissionCheck>, callback: GrpcResponse<Decision>) {
Expand Down
9 changes: 7 additions & 2 deletions modules/authorization/src/authorization.proto
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,12 @@ message AllowedResourcesResponse {
message ResourceAccessListRequest {
string subject = 1;
string action = 2;
string resourceType = 5;
string resourceType = 3;
optional string viewName = 4;
}

message ResourceAccessListResponse {
string viewName = 1;
}

message PermissionCheck {
Expand Down Expand Up @@ -110,5 +115,5 @@ service Authorization {
rpc FindRelation(FindRelationRequest) returns (FindRelationResponse);
rpc Can(PermissionCheck) returns (Decision);
rpc GetAllowedResources(AllowedResourcesRequest) returns (AllowedResourcesResponse);
rpc CreateResourceAccessList(ResourceAccessListRequest) returns (google.protobuf.Empty);
rpc CreateResourceAccessList(ResourceAccessListRequest) returns (ResourceAccessListResponse);
}
14 changes: 11 additions & 3 deletions modules/authorization/src/controllers/permissions.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,15 +127,23 @@ export class PermissionsController {
return { resources: allowedIds.concat(index), count };
}

async createAccessList(subject: string, action: string, objectType: string) {
async createAccessList(
subject: string,
action: string,
objectType: string,
requestedViewName?: string,
) {
const computedTuple = `${subject}#${action}@${objectType}`;
const objectTypeCollection = await this.grpcSdk
.database!.getSchema(objectType)
.then(r => r.collectionName);
const viewName =
requestedViewName ??
createHash('sha256').update(`${objectType}_${subject}_${action}`).digest('hex');
const dbType = await this.grpcSdk.database!.getDatabaseType().then(r => r.result);
await this.grpcSdk.database?.createView(
objectType,
createHash('sha256').update(`${objectType}_${subject}_${action}`).digest('hex'),
viewName,
['Permission', 'ActorIndex', 'ObjectIndex'],
{
mongoQuery: [
Expand Down Expand Up @@ -246,6 +254,6 @@ export class PermissionsController {
),
},
);
return;
return viewName;
}
}

0 comments on commit 74a464e

Please sign in to comment.