mirror of
https://github.com/grafana/grafana.git
synced 2026-08-18 17:15:08 -05:00
RBAC: Refactor GetUserPermissions to use []accesscontrol.Permission (#50683)
* Return slice of permissions instead of slice of pointers for permissions
This commit is contained in:
@@ -103,7 +103,7 @@ func (ac *OSSAccessControlService) Evaluate(ctx context.Context, user *models.Si
|
||||
}
|
||||
|
||||
// GetUserPermissions returns user permissions based on built-in roles
|
||||
func (ac *OSSAccessControlService) GetUserPermissions(ctx context.Context, user *models.SignedInUser, _ accesscontrol.Options) ([]*accesscontrol.Permission, error) {
|
||||
func (ac *OSSAccessControlService) GetUserPermissions(ctx context.Context, user *models.SignedInUser, _ accesscontrol.Options) ([]accesscontrol.Permission, error) {
|
||||
timer := prometheus.NewTimer(metrics.MAccessPermissionsSummary)
|
||||
defer timer.ObserveDuration()
|
||||
|
||||
@@ -120,28 +120,24 @@ func (ac *OSSAccessControlService) GetUserPermissions(ctx context.Context, user
|
||||
}
|
||||
|
||||
permissions = append(permissions, dbPermissions...)
|
||||
resolved := make([]*accesscontrol.Permission, 0, len(permissions))
|
||||
keywordMutator := ac.scopeResolvers.GetScopeKeywordMutator(user)
|
||||
for _, p := range permissions {
|
||||
for i := range permissions {
|
||||
// if the permission has a keyword in its scope it will be resolved
|
||||
p.Scope, err = keywordMutator(ctx, p.Scope)
|
||||
permissions[i].Scope, err = keywordMutator(ctx, permissions[i].Scope)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
resolved = append(resolved, p)
|
||||
}
|
||||
|
||||
return resolved, nil
|
||||
return permissions, nil
|
||||
}
|
||||
|
||||
func (ac *OSSAccessControlService) getFixedPermissions(ctx context.Context, user *models.SignedInUser) []*accesscontrol.Permission {
|
||||
permissions := make([]*accesscontrol.Permission, 0)
|
||||
func (ac *OSSAccessControlService) getFixedPermissions(ctx context.Context, user *models.SignedInUser) []accesscontrol.Permission {
|
||||
permissions := make([]accesscontrol.Permission, 0)
|
||||
|
||||
for _, builtin := range accesscontrol.GetOrgRoles(ac.cfg, user) {
|
||||
if basicRole, ok := ac.roles[builtin]; ok {
|
||||
for i := range basicRole.Permissions {
|
||||
permissions = append(permissions, &basicRole.Permissions[i])
|
||||
}
|
||||
permissions = append(permissions, basicRole.Permissions...)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,10 +35,10 @@ func setupTestEnv(t testing.TB) *OSSAccessControlService {
|
||||
}
|
||||
|
||||
// extractRawPermissionsHelper extracts action and scope fields only from a permission slice
|
||||
func extractRawPermissionsHelper(perms []*accesscontrol.Permission) []*accesscontrol.Permission {
|
||||
res := make([]*accesscontrol.Permission, len(perms))
|
||||
func extractRawPermissionsHelper(perms []accesscontrol.Permission) []accesscontrol.Permission {
|
||||
res := make([]accesscontrol.Permission, len(perms))
|
||||
for i, p := range perms {
|
||||
res[i] = &accesscontrol.Permission{Action: p.Action, Scope: p.Scope}
|
||||
res[i] = accesscontrol.Permission{Action: p.Action, Scope: p.Scope}
|
||||
}
|
||||
return res
|
||||
}
|
||||
@@ -421,8 +421,8 @@ func TestOSSAccessControlService_GetUserPermissions(t *testing.T) {
|
||||
|
||||
rawUserPerms := extractRawPermissionsHelper(userPerms)
|
||||
|
||||
assert.Contains(t, rawUserPerms, &tt.wantPerm, "Expected resolution of raw permission")
|
||||
assert.NotContains(t, rawUserPerms, &tt.rawPerm, "Expected raw permission to have been resolved")
|
||||
assert.Contains(t, rawUserPerms, tt.wantPerm, "Expected resolution of raw permission")
|
||||
assert.NotContains(t, rawUserPerms, tt.rawPerm, "Expected raw permission to have been resolved")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user