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

Method ListRoles

backend/store/role.go:149–209  ·  view source on GitHub ↗

ListRoles returns a list of roles.

(ctx context.Context, find *FindRoleMessage)

Source from the content-addressed store, hash-verified

147
148// ListRoles returns a list of roles.
149func (s *Store) ListRoles(ctx context.Context, find *FindRoleMessage) ([]*RoleMessage, error) {
150 // If looking for a specific role, check predefined first
151 if v := find.ResourceID; v != nil {
152 if role := GetPredefinedRole(*v); role != nil {
153 return []*RoleMessage{role}, nil
154 }
155 }
156
157 q := qb.Q().Space(`
158 SELECT
159 resource_id, workspace, name, description, permissions
160 FROM role
161 WHERE workspace = ?
162 `, find.Workspace)
163
164 if v := find.ResourceID; v != nil {
165 q.And("resource_id = ?", *v)
166 }
167
168 query, args, err := q.ToSQL()
169 if err != nil {
170 return nil, errors.Wrapf(err, "failed to build sql")
171 }
172
173 rows, err := s.GetDB().QueryContext(ctx, query, args...)
174 if err != nil {
175 return nil, err
176 }
177 defer rows.Close()
178
179 var roles []*RoleMessage
180 for rows.Next() {
181 role := &RoleMessage{
182 Permissions: map[permission.Permission]bool{},
183 }
184 var permissionBytes []byte
185 if err := rows.Scan(&role.ResourceID, &role.Workspace, &role.Name, &role.Description, &permissionBytes); err != nil {
186 return nil, err
187 }
188 var rolePermissions storepb.RolePermissions
189 if err := common.ProtojsonUnmarshaler.Unmarshal(permissionBytes, &rolePermissions); err != nil {
190 return nil, err
191 }
192 for _, v := range rolePermissions.Permissions {
193 role.Permissions[v] = true
194 }
195 s.rolesCache.Add(role.ResourceID, role)
196 roles = append(roles, role)
197 }
198
199 if err := rows.Err(); err != nil {
200 return nil, err
201 }
202
203 // Append predefined roles when listing all roles
204 if find.ResourceID == nil {
205 roles = append(roles, PredefinedRoles...)
206 }

Callers 1

GetRoleMethod · 0.95

Calls 11

GetDBMethod · 0.95
QFunction · 0.92
GetPredefinedRoleFunction · 0.85
SpaceMethod · 0.80
AndMethod · 0.80
ToSQLMethod · 0.80
QueryContextMethod · 0.80
ScanMethod · 0.80
UnmarshalMethod · 0.80
CloseMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected