Skip to content

Latest commit

 

History

History
101 lines (79 loc) · 4.19 KB

File metadata and controls

101 lines (79 loc) · 4.19 KB

Multi-User Library Access Control Implementation Summary

Overview

Successfully implemented multi-user library access control system for nowen-reader, enabling administrators to control which users can access specific comic/novel directories.

Backend Implementation

Database Changes

  • Migration Version 22: Added Library and UserLibraryAccess tables
  • Comic Table: Added libraryId and relativePath columns
  • Indexes: Added indexes for library filtering performance

New Files

  1. internal/store/library_store.go - Complete CRUD operations for Library and UserLibraryAccess
  2. internal/handler/library_handler.go - Admin API handlers for library management
  3. internal/handler/routes_library.go - Route definitions for library management

Modified Files

  1. internal/model/models.go - Added Library and UserLibraryAccess models
  2. internal/store/db.go - Added tables to database schema
  3. internal/store/migrate.go - Added migration version 22
  4. internal/store/comic_query.go - Added library filtering and fields
  5. internal/store/comic_batch.go - Updated bulk creation with libraryId
  6. internal/handler/comic.go - Added library filtering to ListComics and authorization to GetComic
  7. internal/handler/images.go - Added authorization to all image endpoints
  8. internal/handler/router.go - Registered library routes
  9. internal/service/scanner.go - Updated scanner to assign libraryId

API Endpoints Added

  • GET /api/admin/libraries - List all libraries
  • POST /api/admin/libraries - Create library
  • PUT /api/admin/libraries/:id - Update library
  • DELETE /api/admin/libraries/:id - Delete library
  • GET /api/admin/users/:id/library-access - Get user library access
  • PUT /api/admin/users/:id/library-access - Set user library access

Frontend Implementation

New Files

  1. frontend/src/api/libraries.ts - API functions for library management
  2. frontend/src/components/LibraryManagementPanel.tsx - Library management UI
  3. frontend/src/components/UserLibraryAccessPanel.tsx - User library access configuration

Modified Files

  1. frontend/src/app/settings/page.tsx - Added library management tab
  2. frontend/src/components/UserManagementPanel.tsx - Added library access button

Security Features

Backend Authorization

  • 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

Data Isolation

  • Comics are assigned to libraries during scanning
  • Library filtering at SQL level for performance
  • Backward compatibility with existing data (default library)

Key Features

Library Management

  • Create, read, update, delete libraries
  • Support for comic, novel, and mixed library types
  • Enable/disable libraries
  • Sort order configuration

User Access Control

  • Assign library access per user
  • Bulk permission management
  • Admin users bypass all restrictions
  • New users have no library access by default

Scanner Integration

  • Automatic library creation based on scan directories
  • Library assignment during comic scanning
  • Support for multiple scan directories

Testing Recommendations

  1. Admin Access: Verify admin can see all libraries and comics
  2. User Restrictions: Verify regular users can only access assigned libraries
  3. API Security: Test all endpoints return 403 for unauthorized access
  4. Library CRUD: Test all library management operations
  5. User Permissions: Test assigning and revoking library access
  6. Scanner Integration: Verify comics are assigned to correct libraries

Future Enhancements

  1. Sub-directory Permissions: Granular permissions within libraries
  2. Tag/Category Permissions: Permission based on tags or categories
  3. Download Permissions: Control who can download content
  4. Permission Inheritance: Hierarchical permission system
  5. Audit Logging: Track permission changes

Migration Notes

  • Existing comics are automatically assigned to a "default" library
  • No data loss during migration
  • Backward compatible with existing filename-based IDs