MCPcopy Create free account
hub / github.com/bytebase/bytebase / createIamSlice

Function createIamSlice

frontend/src/react/stores/app/iam.ts:54–388  ·  view source on GitHub ↗
(set, get)

Source from the content-addressed store, hash-verified

52};
53
54export const createIamSlice: AppSliceCreator<IamSlice> = (set, get) => ({
55 projectPoliciesByName: {},
56 projectPolicyRequests: {},
57 roles: [],
58
59 loadWorkspacePermissionState: async () => {
60 await Promise.all([
61 get().loadCurrentUser(),
62 get().loadServerInfo(),
63 get().loadWorkspace(),
64 ]);
65
66 const rolesRequest =
67 get().rolesRequest ??
68 roleServiceClientConnect
69 .listRoles(createProto(ListRolesRequestSchema, {}))
70 .then((response) => {
71 set({
72 roles: response.roles,
73 roleList: response.roles,
74 rolesRequest: undefined,
75 });
76 return response.roles;
77 })
78 .catch(() => {
79 set({ rolesRequest: undefined });
80 return [];
81 });
82 set({ rolesRequest });
83
84 const policyResource =
85 get().serverInfo?.workspace ||
86 get().workspace?.name ||
87 get().currentUser?.workspace ||
88 `${workspaceNamePrefix}-`;
89 const policyRequest =
90 get().workspacePolicyRequest ??
91 workspaceServiceClientConnect
92 .getIamPolicy(
93 createProto(GetIamPolicyRequestSchema, { resource: policyResource })
94 )
95 .then(async (workspacePolicy) => {
96 set({ workspacePolicy, workspacePolicyRequest: undefined });
97 // Prefetch the group / user members referenced by the policy so
98 // derived role maps and any UI that resolves member display names
99 // (e.g. the workspace members table's `getMemberBindings`) read
100 // from a populated cache. Without the user prefetch every member
101 // failed the `getUserByIdentifier` lookup and was flagged pending,
102 // rendering an "Invited" badge for everyone in SaaS mode. Mirrors
103 // the project IAM path in `loadProjectIamPolicy`.
104 const groupMembers: string[] = [];
105 const userMembers: string[] = [];
106 for (const binding of workspacePolicy.bindings) {
107 for (const member of binding.members) {
108 if (member.startsWith(groupBindingPrefix)) {
109 groupMembers.push(member);
110 } else {
111 userMembers.push(member);

Callers 1

createAppStoreFunction · 0.90

Calls 10

getUserListInBindingFunction · 0.90
isBindingPolicyExpiredFunction · 0.90
bindingMatchesUserFunction · 0.90
getFunction · 0.85
setFunction · 0.85
mergeBindingFunction · 0.85
getIamPolicyMethod · 0.80
addMethod · 0.80
setMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected