feat(scanner): scanner entrypoints + generic jobs carry RLS identity; SeedDB harness fallback
The full suite enumerated the remaining triage class: tests drive the scanner directly (ScanFolders(context.Background())) and read seeded media via Queries with bare contexts — every governed read raised. - MediaScanner.ScanFolders self-declares its configured admin (SetAdminID — set by main AND the test helpers): a scan is server maintenance, product-correct regardless of caller. - ScopedDB gains a Fallback identity, exposed as NewSeedDB for the TEST HARNESS ONLY: setup.DB falls back to rls.SeedIdentity when the context carries none, so direct seeding/verification helpers work uniformly instead of per-site context threading. rls.SeedIdentity is the shared constant (no library_visibility rows => full visibility). - generic job creation (jobs.go) stamps the requesting admin into the job Context, same as the scan endpoint. The sync queue processor stays identity-free: sync_queue is not an RLS-governed table.
This commit is contained in:
1 parent
385a5d9dba
commit
bb2cc26e9d
9 files changed
+72
-35
No files matched your search
@@ -213,7 +213,7 @@ func (h *WSHandler) getInitialState(userID string) map[string]interface{} {
|
||||
|
||||
progressMap := make(map[string]map[string]interface{})
|
||||
for _, item := range mediaItems {
|
||||
progress, err := h.db.GetUniversalProgress(context.Background(), database.GetUniversalProgressParams{
|
||||
progress, err := h.db.GetUniversalProgress(rls.WithUser(context.Background(), pgUserID), database.GetUniversalProgressParams{
|
||||
MediaItemID: item.ID,
|
||||
UserID: pgUserID,
|
||||
})
|
||||
|
||||
Reference in new issue
Block a user