Successfully implemented multi-user library access control system for nowen-reader, enabling administrators to control which users can access specific comic/novel directories.
- Migration Version 22: Added
LibraryandUserLibraryAccesstables - Comic Table: Added
libraryIdandrelativePathcolumns - Indexes: Added indexes for library filtering performance
internal/store/library_store.go- Complete CRUD operations for Library and UserLibraryAccessinternal/handler/library_handler.go- Admin API handlers for library managementinternal/handler/routes_library.go- Route definitions for library management
internal/model/models.go- Added Library and UserLibraryAccess modelsinternal/store/db.go- Added tables to database schemainternal/store/migrate.go- Added migration version 22internal/store/comic_query.go- Added library filtering and fieldsinternal/store/comic_batch.go- Updated bulk creation with libraryIdinternal/handler/comic.go- Added library filtering to ListComics and authorization to GetComicinternal/handler/images.go- Added authorization to all image endpointsinternal/handler/router.go- Registered library routesinternal/service/scanner.go- Updated scanner to assign libraryId
GET /api/admin/libraries- List all librariesPOST /api/admin/libraries- Create libraryPUT /api/admin/libraries/:id- Update libraryDELETE /api/admin/libraries/:id- Delete libraryGET /api/admin/users/:id/library-access- Get user library accessPUT /api/admin/users/:id/library-access- Set user library access
frontend/src/api/libraries.ts- API functions for library managementfrontend/src/components/LibraryManagementPanel.tsx- Library management UIfrontend/src/components/UserLibraryAccessPanel.tsx- User library access configuration
frontend/src/app/settings/page.tsx- Added library management tabfrontend/src/components/UserManagementPanel.tsx- Added library access button
- All comic and image endpoints check library access
- Admin users have access to all libraries by default
- Regular users can only access explicitly assigned libraries
- 403 Forbidden responses for unauthorized access
- Comics are assigned to libraries during scanning
- Library filtering at SQL level for performance
- Backward compatibility with existing data (default library)
- Create, read, update, delete libraries
- Support for comic, novel, and mixed library types
- Enable/disable libraries
- Sort order configuration
- Assign library access per user
- Bulk permission management
- Admin users bypass all restrictions
- New users have no library access by default
- Automatic library creation based on scan directories
- Library assignment during comic scanning
- Support for multiple scan directories
- Admin Access: Verify admin can see all libraries and comics
- User Restrictions: Verify regular users can only access assigned libraries
- API Security: Test all endpoints return 403 for unauthorized access
- Library CRUD: Test all library management operations
- User Permissions: Test assigning and revoking library access
- Scanner Integration: Verify comics are assigned to correct libraries
- Sub-directory Permissions: Granular permissions within libraries
- Tag/Category Permissions: Permission based on tags or categories
- Download Permissions: Control who can download content
- Permission Inheritance: Hierarchical permission system
- Audit Logging: Track permission changes
- Existing comics are automatically assigned to a "default" library
- No data loss during migration
- Backward compatible with existing filename-based IDs