MCPcopy Index your code
hub / github.com/bytebase/bytebase / checkMetadataPermissions

Method checkMetadataPermissions

backend/api/lsp/handler.go:205–253  ·  view source on GitHub ↗
(ctx context.Context, metadata SetMetadataCommandArguments)

Source from the content-addressed store, hash-verified

203}
204
205func (h *Handler) checkMetadataPermissions(ctx context.Context, metadata SetMetadataCommandArguments) error {
206 user, ok := ctx.Value(common.UserContextKey).(*store.UserMessage)
207 if !ok || user == nil {
208 return errors.New("user not authenticated")
209 }
210
211 workspaceID := common.GetWorkspaceIDFromContext(ctx)
212
213 // If database is specified, check database schema permission
214 if metadata.DatabaseName != "" && metadata.InstanceID != "" {
215 // Need to get database to find its project
216 instanceID, err := common.GetInstanceID(metadata.InstanceID)
217 if err != nil {
218 return err
219 }
220
221 database, err := h.store.GetDatabase(ctx, &store.FindDatabaseMessage{
222 Workspace: workspaceID,
223 InstanceID: &instanceID,
224 DatabaseName: &metadata.DatabaseName,
225 })
226 if err != nil {
227 return errors.Wrap(err, "failed to get database")
228 }
229 if database == nil {
230 return errors.Errorf("database %q not found", metadata.DatabaseName)
231 }
232
233 // Check bb.databases.getSchema permission
234 ok, err := h.iamManager.CheckPermission(ctx, permission.DatabasesGetSchema, user, workspaceID, database.ProjectID)
235 if err != nil {
236 return errors.Wrap(err, "failed to check permission")
237 }
238 if !ok {
239 return errors.Errorf("no permission to access database %q", metadata.DatabaseName)
240 }
241 } else if metadata.InstanceID != "" && metadata.DatabaseName == "" {
242 // If only instance is specified, check instance get permission
243 ok, err := h.iamManager.CheckPermission(ctx, permission.InstancesGet, user, workspaceID)
244 if err != nil {
245 return errors.Wrap(err, "failed to check permission")
246 }
247 if !ok {
248 return errors.Errorf("no permission to access instance %q", metadata.InstanceID)
249 }
250 }
251
252 return nil
253}
254
255func (h *Handler) reset(params *lsp.InitializeParams) error {
256 h.mu.Lock()

Callers 1

handleMethod · 0.95

Calls 5

GetInstanceIDFunction · 0.92
ErrorfMethod · 0.80
CheckPermissionMethod · 0.80
GetDatabaseMethod · 0.65

Tested by

no test coverage detected