mirror of
https://github.com/navidrome/navidrome.git
synced 2026-10-25 17:57:08 +01:00
refactor: remove unused library access functions and related tests
Signed-off-by: Deluan <deluan@navidrome.org>
This commit is contained in:
parent
b9386ab41a
commit
72006fab4c
3 changed files with 0 additions and 153 deletions
|
|
@ -145,68 +145,3 @@ func getEncKey() []byte {
|
|||
sum := sha256.Sum256([]byte(key))
|
||||
return sum[:]
|
||||
}
|
||||
|
||||
// Library-based permission helpers
|
||||
|
||||
// HasLibraryAccess checks if a user has access to a specific library
|
||||
func HasLibraryAccess(ctx context.Context, ds model.DataStore, userID string, libraryID int) bool {
|
||||
user, ok := request.UserFrom(ctx)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
// Admin users have access to all libraries
|
||||
if user.IsAdmin {
|
||||
return true
|
||||
}
|
||||
|
||||
// Check if user has explicit access to this library
|
||||
libraries, err := ds.User(ctx).GetUserLibraries(userID)
|
||||
if err != nil {
|
||||
log.Error(ctx, "Error checking library access", "userID", userID, "libraryID", libraryID, err)
|
||||
return false
|
||||
}
|
||||
|
||||
for _, lib := range libraries {
|
||||
if lib.ID == libraryID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// GetUserLibraryIDs returns a list of library IDs the user has access to
|
||||
func GetUserLibraryIDs(ctx context.Context, ds model.DataStore, userID string) []int {
|
||||
user, ok := request.UserFrom(ctx)
|
||||
if !ok {
|
||||
return []int{}
|
||||
}
|
||||
|
||||
// Admin users have access to all libraries
|
||||
if user.IsAdmin {
|
||||
libraries, err := ds.Library(ctx).GetAll()
|
||||
if err != nil {
|
||||
log.Error(ctx, "Error getting all libraries for admin", "userID", userID, err)
|
||||
return []int{}
|
||||
}
|
||||
var ids []int
|
||||
for _, lib := range libraries {
|
||||
ids = append(ids, lib.ID)
|
||||
}
|
||||
return ids
|
||||
}
|
||||
|
||||
// Get user's accessible libraries
|
||||
libraries, err := ds.User(ctx).GetUserLibraries(userID)
|
||||
if err != nil {
|
||||
log.Error(ctx, "Error getting user libraries", "userID", userID, err)
|
||||
return []int{}
|
||||
}
|
||||
|
||||
var ids []int
|
||||
for _, lib := range libraries {
|
||||
ids = append(ids, lib.ID)
|
||||
}
|
||||
return ids
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,25 +39,6 @@ func (u User) HasLibraryAccess(libraryID int) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// AccessibleLibraryIDs returns a slice of library IDs that the user has access to
|
||||
func (u User) AccessibleLibraryIDs() []int {
|
||||
return u.Libraries.IDs()
|
||||
}
|
||||
|
||||
func (u User) FilteredLibraries(libraryIds []int) Libraries {
|
||||
libMap := make(map[int]Library, len(u.Libraries))
|
||||
for _, lib := range u.Libraries {
|
||||
libMap[lib.ID] = lib
|
||||
}
|
||||
var filtered Libraries
|
||||
for _, id := range libraryIds {
|
||||
if lib, ok := libMap[id]; ok {
|
||||
filtered = append(filtered, lib)
|
||||
}
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
|
||||
type Users []User
|
||||
|
||||
type UserRepository interface {
|
||||
|
|
|
|||
|
|
@ -80,73 +80,4 @@ var _ = Describe("User", func() {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
Describe("FilteredLibraries", func() {
|
||||
It("returns only libraries that match the filter", func() {
|
||||
filtered := user.FilteredLibraries([]int{1, 3})
|
||||
expected := model.Libraries{
|
||||
{ID: 1, Name: "Rock Library", Path: "/music/rock"},
|
||||
{ID: 3, Name: "Classical Library", Path: "/music/classical"},
|
||||
}
|
||||
Expect(filtered).To(Equal(expected))
|
||||
})
|
||||
|
||||
It("returns single library when filter contains one matching ID", func() {
|
||||
filtered := user.FilteredLibraries([]int{2})
|
||||
expected := model.Libraries{
|
||||
{ID: 2, Name: "Jazz Library", Path: "/music/jazz"},
|
||||
}
|
||||
Expect(filtered).To(Equal(expected))
|
||||
})
|
||||
|
||||
It("returns nil slice when filter has no matching IDs", func() {
|
||||
filtered := user.FilteredLibraries([]int{99, 100})
|
||||
Expect(filtered).To(BeNil())
|
||||
})
|
||||
|
||||
It("returns nil slice when filter is empty", func() {
|
||||
filtered := user.FilteredLibraries([]int{})
|
||||
Expect(filtered).To(BeNil())
|
||||
})
|
||||
|
||||
It("returns nil slice when filter is nil", func() {
|
||||
filtered := user.FilteredLibraries(nil)
|
||||
Expect(filtered).To(BeNil())
|
||||
})
|
||||
|
||||
It("returns nil slice when user has no libraries", func() {
|
||||
user.Libraries = nil
|
||||
filtered := user.FilteredLibraries([]int{1, 2, 3})
|
||||
Expect(filtered).To(BeNil())
|
||||
})
|
||||
|
||||
It("returns nil slice when user has empty libraries", func() {
|
||||
user.Libraries = model.Libraries{}
|
||||
filtered := user.FilteredLibraries([]int{1, 2, 3})
|
||||
Expect(filtered).To(BeNil())
|
||||
})
|
||||
|
||||
It("handles partial matches correctly", func() {
|
||||
filtered := user.FilteredLibraries([]int{1, 99, 2, 100})
|
||||
expected := model.Libraries{
|
||||
{ID: 1, Name: "Rock Library", Path: "/music/rock"},
|
||||
{ID: 2, Name: "Jazz Library", Path: "/music/jazz"},
|
||||
}
|
||||
Expect(filtered).To(Equal(expected))
|
||||
})
|
||||
})
|
||||
|
||||
Describe("AccessibleLibraryIDs", func() {
|
||||
It("returns all library IDs when user has libraries", func() {
|
||||
ids := user.AccessibleLibraryIDs()
|
||||
expected := []int{1, 2, 3}
|
||||
Expect(ids).To(Equal(expected))
|
||||
})
|
||||
|
||||
It("returns nil when user has no libraries", func() {
|
||||
user.Libraries = nil
|
||||
ids := user.AccessibleLibraryIDs()
|
||||
Expect(ids).To(BeEmpty())
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue