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

Method UpdateRole

backend/store/role.go:212–266  ·  view source on GitHub ↗

UpdateRole updates an existing role.

(ctx context.Context, patch *UpdateRoleMessage)

Source from the content-addressed store, hash-verified

210
211// UpdateRole updates an existing role.
212func (s *Store) UpdateRole(ctx context.Context, patch *UpdateRoleMessage) (*RoleMessage, error) {
213 set := qb.Q()
214 if v := patch.Name; v != nil {
215 set.Comma("name = ?", *v)
216 }
217 if v := patch.Description; v != nil {
218 set.Comma("description = ?", *v)
219 }
220 if v := patch.Permissions; v != nil {
221 p := &storepb.RolePermissions{}
222 for k := range *v {
223 p.Permissions = append(p.Permissions, k)
224 }
225 permissionBytes, err := protojson.Marshal(p)
226 if err != nil {
227 return nil, err
228 }
229 set.Comma("permissions = ?", permissionBytes)
230 }
231 if set.Len() == 0 {
232 return nil, errors.New("no fields to update")
233 }
234
235 q := qb.Q().Space(`
236 UPDATE role
237 SET ?
238 WHERE resource_id = ? AND workspace = ?
239 RETURNING name, description, permissions
240 `, set, patch.ResourceID, patch.Workspace)
241
242 query, args, err := q.ToSQL()
243 if err != nil {
244 return nil, errors.Wrapf(err, "failed to build sql")
245 }
246
247 role := &RoleMessage{
248 ResourceID: patch.ResourceID,
249 Permissions: map[permission.Permission]bool{},
250 }
251 var permissionBytes []byte
252 if err := s.GetDB().QueryRowContext(ctx, query, args...).Scan(&role.Name, &role.Description, &permissionBytes); err != nil {
253 return nil, err
254 }
255 s.rolesCache.Remove(patch.ResourceID)
256 var rolePermissions storepb.RolePermissions
257 if err := common.ProtojsonUnmarshaler.Unmarshal(permissionBytes, &rolePermissions); err != nil {
258 return nil, err
259 }
260 for _, v := range rolePermissions.Permissions {
261 role.Permissions[v] = true
262 }
263
264 s.rolesCache.Add(role.ResourceID, role)
265 return role, nil
266}
267
268// DeleteRole deletes an existing role.
269func (s *Store) DeleteRole(ctx context.Context, workspace string, resourceID string) error {

Callers

nothing calls this directly

Calls 8

GetDBMethod · 0.95
QFunction · 0.92
CommaMethod · 0.80
LenMethod · 0.80
SpaceMethod · 0.80
ToSQLMethod · 0.80
ScanMethod · 0.80
UnmarshalMethod · 0.80

Tested by

no test coverage detected