|
|
|
@ -3,6 +3,7 @@ package acimpl |
|
|
|
|
import ( |
|
|
|
|
"context" |
|
|
|
|
"fmt" |
|
|
|
|
"slices" |
|
|
|
|
"strconv" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
@ -249,7 +250,7 @@ func (s *Service) SearchUsersPermissions(ctx context.Context, user identity.Requ |
|
|
|
|
basicPermissions := map[string][]accesscontrol.Permission{} |
|
|
|
|
for role, basicRole := range s.roles { |
|
|
|
|
for i := range basicRole.Permissions { |
|
|
|
|
if PermissionMatchesSearchOptions(basicRole.Permissions[i], options) { |
|
|
|
|
if PermissionMatchesSearchOptions(basicRole.Permissions[i], &options) { |
|
|
|
|
basicPermissions[role] = append(basicPermissions[role], basicRole.Permissions[i]) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -351,7 +352,7 @@ func (s *Service) searchUserPermissions(ctx context.Context, orgID int64, search |
|
|
|
|
for _, builtin := range roles { |
|
|
|
|
if basicRole, ok := s.roles[builtin]; ok { |
|
|
|
|
for _, permission := range basicRole.Permissions { |
|
|
|
|
if PermissionMatchesSearchOptions(permission, searchOptions) { |
|
|
|
|
if PermissionMatchesSearchOptions(permission, &searchOptions) { |
|
|
|
|
permissions = append(permissions, permission) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -384,7 +385,7 @@ func (s *Service) searchUserPermissionsFromCache(orgID int64, searchOptions acce |
|
|
|
|
s.log.Debug("Using cached permissions", "key", key) |
|
|
|
|
filteredPermissions := make([]accesscontrol.Permission, 0) |
|
|
|
|
for _, permission := range permissions.([]accesscontrol.Permission) { |
|
|
|
|
if PermissionMatchesSearchOptions(permission, searchOptions) { |
|
|
|
|
if PermissionMatchesSearchOptions(permission, &searchOptions) { |
|
|
|
|
filteredPermissions = append(filteredPermissions, permission) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -392,9 +393,13 @@ func (s *Service) searchUserPermissionsFromCache(orgID int64, searchOptions acce |
|
|
|
|
return filteredPermissions, true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func PermissionMatchesSearchOptions(permission accesscontrol.Permission, searchOptions accesscontrol.SearchOptions) bool { |
|
|
|
|
if searchOptions.Scope != "" && permission.Scope != searchOptions.Scope { |
|
|
|
|
return false |
|
|
|
|
func PermissionMatchesSearchOptions(permission accesscontrol.Permission, searchOptions *accesscontrol.SearchOptions) bool { |
|
|
|
|
if searchOptions.Scope != "" { |
|
|
|
|
// Permissions including the scope should also match
|
|
|
|
|
scopes := append(searchOptions.Wildcards(), searchOptions.Scope) |
|
|
|
|
if !slices.Contains[[]string, string](scopes, permission.Scope) { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if searchOptions.Action != "" { |
|
|
|
|
return permission.Action == searchOptions.Action |
|
|
|
|