Skip to content

Commit ce4e2aa

Browse files
grant project querier
1 parent b19c88c commit ce4e2aa

2 files changed

Lines changed: 49 additions & 5 deletions

File tree

sql-editor/src/app/api/create-user/route.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createBBIssueWorkflow, generateBBToken } from "../utils";
1+
import { createBBIssueWorkflow, generateBBToken, grantUserRole } from "../utils";
22

33
function generateRandomString(length: number): string {
44
const characters = 'abcdefghijklmnopqrstuvwxyz';
@@ -45,7 +45,7 @@ export async function GET(request: Request) {
4545
console.error('Failed to create user', await createUserResponse.text());
4646
throw new Error('Failed to create user');
4747
}
48-
console.log('User created successfully in Bytebase');
48+
console.log('User created successfully in Bytebase', createUserResponse);
4949

5050
// Create project using the username
5151
console.log(`Creating project for user: ${username}`);
@@ -70,11 +70,14 @@ export async function GET(request: Request) {
7070

7171
console.log('User creation process completed successfully');
7272

73-
console.log('now create db');
73+
//console.log('now create db');
74+
//const result = await createBBIssueWorkflow(username)
75+
//console.log("after creating db", result)
7476

75-
const result = await createBBIssueWorkflow(username)
76-
console.log("after creating db", result)
7777

78+
// Grant the user project querier role
79+
const result = await grantUserRole(username);
80+
console.log("after grantUserRole", result)
7881

7982
// Return the credentials and created project
8083
return new Response(JSON.stringify({

sql-editor/src/app/api/utils.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import exp from 'constants';
12
import { v4 } from 'uuid';
23

34
export interface BytebaseDatabase {
@@ -48,6 +49,46 @@ export async function generateBBToken() {
4849
return token.token;
4950
}
5051

52+
export async function grantUserRole(project: string) {
53+
const username = project;
54+
const token = await generateBBToken();
55+
const response = await fetchData(`${process.env.NEXT_PUBLIC_BB_HOST}/v1/projects/${project}:getIamPolicy`, token, {
56+
method: 'GET'
57+
});
58+
59+
console.log("=============getIamPolicy", JSON.stringify(response));
60+
61+
response.bindings.push({
62+
"role": "roles/projectQuerier",
63+
"members": [`user:${username}@example.com`],
64+
"condition": {
65+
"expression": "",
66+
"title": "",
67+
"description": "",
68+
"location": ""
69+
},
70+
"parsedExpr": null
71+
});
72+
73+
const newResponse = {
74+
"resource":`projects/${project}`,
75+
"policy": {bindings: response.bindings},
76+
"etag": response.etag
77+
}
78+
79+
80+
console.log("=============after push", JSON.stringify(newResponse));
81+
82+
const setResponse = await fetchData(`${process.env.NEXT_PUBLIC_BB_HOST}/v1/projects/${project}:setIamPolicy`, token, {
83+
method: 'POST',
84+
body: JSON.stringify(newResponse)
85+
});
86+
87+
console.log("=============grantUserRole", setResponse);
88+
89+
return setResponse;
90+
}
91+
5192
/*async function createSheet(project: string) {
5293
// const SQL = `CREATE DATABASE "${project}" WITH TEMPLATE "hr_prod" OWNER "bbsample"`;
5394
// console.log("========sql=======in createSheet", SQL);

0 commit comments

Comments
 (0)