02 — User Personas (Library Module)
- 1. The Librarian (primary catalog + circulation user)
- 2. Catalog Admin / Org Admin (setup + oversight)
- 3. Student (borrower)
- 4. Parent (read-only observer)
- 5. Accounts / Bursar (fine collector, occasional)
- Permission → capability matrix
Who uses the library surface, what permissions they hold (
permissions.constants.ts:55-61), and what the client must show each. RBAC enforcement is(planned)(OQ-1) — today any authenticated user can call any library endpoint; these personas are the target post-RBAC model.
1. The Librarian (primary catalog + circulation user)
| Role | Staff member assigned library duty; holds books.read/create/update/delete, books.issue, books.return, fines.pay |
| Goals | Keep catalog accurate; move books in and out fast at the desk; collect fine payments; see what's overdue |
| Pains | Double-issuing a copy that has no stock; losing track of who owes what; duplicate ISBN entries |
| Key screens | Catalog list/search, book detail, issue form, return form, overdue view, borrowed-by-me (for lookups) |
| Behaviour notes | Fast scanning + typing; wants availability visible in every list row; wants a confirm step on money actions (fine pay) |
| Frequency | Daily, many transactions; optimizes for speed, tolerates confirmation dialogs |
2. Catalog Admin / Org Admin (setup + oversight)
| Role | Org admin or head librarian; books.read/update/delete (+ RBAC assignment in the future) |
| Goals | Onboard the collection (bulk import (planned)), fix metadata, retire books, define who may issue |
| Pains | Manual entry of hundreds of titles; deleting a book that is still loaned out (409 blocks it) |
| Key screens | Catalog list, book detail, book form (create/edit) |
| Behaviour notes | Desktop/tablet heavy; wants ISBN-uniqueness surfaced immediately (409) |
| Notes | Bulk catalog import (planned) — IMPLEMENTATION_PLAN.md:172,228 |
3. Student (borrower)
| Role | Student of the school; holds books.read in the future ((planned) RBAC) |
| Goals | Find a book (title/author/ISBN search), know if a copy is available, see what they currently hold and what's due/overdue, see fines |
| Pains | Not knowing whether a book is in stock; losing track of due dates; surprise fines |
| Key screens | Catalog list/search, book detail, borrowed-by-me (active + history), fine payment status |
| Behaviour notes | Reads availability badges before walking to the shelf; needs due-date prominence |
| Note | Student view needs their studentId — no me endpoint today (OQ-9); client must pull it from the Students profile state |
4. Parent (read-only observer)
| Role | Parent of a student |
| Goals | See child's current loans and any pending fine |
| Key screens | Borrowed-by-me (child's) view, read-only |
| Behaviour notes | No write actions; fine amounts shown with status `pending |
| Note | Depends on parent↔student linkage from the Students/Parents modules (planned) in this package |
5. Accounts / Bursar (fine collector, occasional)
| Role | Staff with fines.pay (and student.read) |
| Goals | Take fine payments at return time or later; mark paid |
| Key screens | Return form (fine computed inline), fine pay action from a borrow record |
| Behaviour notes | Wants the server's computed fine shown verbatim; records payment against fineStatus: pending records |
Permission → capability matrix
Permission (permissions.constants.ts:55-61) | Capability |
|---|---|
books.read | Catalog list/search/detail, borrow history |
books.create | Create book (add to catalog) |
books.update | Edit book metadata + copy counts |
books.delete | Soft-delete book (blocked while active loans exist) |
books.issue | Issue a copy to a student |
books.return | Return a copy, compute/override fine |
fines.pay | Mark a borrow record's fine paid |
Enforcement is
(planned): no@Permissionsdecorators onlibrary.controller.tsendpoints today (OQ-1). Until then the client can pre-emptively hide actions the user's role lacks, using this matrix.