refactor: replace can_upload boolean with role-based access control
Introduces a three-tier role hierarchy: reader < uploader < admin. - internal/users/role.go: Role type, roleLevel map, AtLeast(min), ParseRole() — new roles added by inserting into roleLevel only - internal/users/store.go: versioned migrations via _schema_version table; v2 migration adds 'role' column and migrates existing can_upload data; SetRole() replaces SetUpload(); Session carries Role instead of CanUpload - internal/web/middleware.go: generic requireRole(minRole) middleware replaces the ad-hoc requireUpload - internal/web/handlers.go: upload routes use requireRole(RoleUploader); listBooks derives canUpload from sess.Role.AtLeast(RoleUploader) - cmd/admin/main.go: user add --role <reader|uploader|admin>, user set-role replaces user set-upload - README, copilot-instructions updated Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -65,11 +65,13 @@ Alternativ können Benutzer mit Upload-Recht Bücher direkt im Browser hochladen
|
||||
|
||||
## Benutzerverwaltung (CLI)
|
||||
|
||||
Rollen (aufsteigend): `reader` → `uploader` → `admin`
|
||||
|
||||
```bash
|
||||
go run ./cmd/admin user add <name> [--role reader|uploader|admin]
|
||||
go run ./cmd/admin user list
|
||||
go run ./cmd/admin user add <name> [--upload]
|
||||
go run ./cmd/admin user delete <name>
|
||||
go run ./cmd/admin user set-upload <name> <true|false>
|
||||
go run ./cmd/admin user set-role <name> <reader|uploader|admin>
|
||||
```
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Reference in New Issue
Block a user