Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

02 — User Personas (Library Module)

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)

RoleStaff member assigned library duty; holds books.read/create/update/delete, books.issue, books.return, fines.pay
GoalsKeep catalog accurate; move books in and out fast at the desk; collect fine payments; see what's overdue
PainsDouble-issuing a copy that has no stock; losing track of who owes what; duplicate ISBN entries
Key screensCatalog list/search, book detail, issue form, return form, overdue view, borrowed-by-me (for lookups)
Behaviour notesFast scanning + typing; wants availability visible in every list row; wants a confirm step on money actions (fine pay)
FrequencyDaily, many transactions; optimizes for speed, tolerates confirmation dialogs

2. Catalog Admin / Org Admin (setup + oversight)

RoleOrg admin or head librarian; books.read/update/delete (+ RBAC assignment in the future)
GoalsOnboard the collection (bulk import (planned)), fix metadata, retire books, define who may issue
PainsManual entry of hundreds of titles; deleting a book that is still loaned out (409 blocks it)
Key screensCatalog list, book detail, book form (create/edit)
Behaviour notesDesktop/tablet heavy; wants ISBN-uniqueness surfaced immediately (409)
NotesBulk catalog import (planned) — IMPLEMENTATION_PLAN.md:172,228

3. Student (borrower)

RoleStudent of the school; holds books.read in the future ((planned) RBAC)
GoalsFind a book (title/author/ISBN search), know if a copy is available, see what they currently hold and what's due/overdue, see fines
PainsNot knowing whether a book is in stock; losing track of due dates; surprise fines
Key screensCatalog list/search, book detail, borrowed-by-me (active + history), fine payment status
Behaviour notesReads availability badges before walking to the shelf; needs due-date prominence
NoteStudent view needs their studentId — no me endpoint today (OQ-9); client must pull it from the Students profile state

4. Parent (read-only observer)

RoleParent of a student
GoalsSee child's current loans and any pending fine
Key screensBorrowed-by-me (child's) view, read-only
Behaviour notesNo write actions; fine amounts shown with status `pending
NoteDepends on parent↔student linkage from the Students/Parents modules (planned) in this package

5. Accounts / Bursar (fine collector, occasional)

RoleStaff with fines.pay (and student.read)
GoalsTake fine payments at return time or later; mark paid
Key screensReturn form (fine computed inline), fine pay action from a borrow record
Behaviour notesWants the server's computed fine shown verbatim; records payment against fineStatus: pending records

Permission → capability matrix

Permission (permissions.constants.ts:55-61)Capability
books.readCatalog list/search/detail, borrow history
books.createCreate book (add to catalog)
books.updateEdit book metadata + copy counts
books.deleteSoft-delete book (blocked while active loans exist)
books.issueIssue a copy to a student
books.returnReturn a copy, compute/override fine
fines.payMark a borrow record's fine paid

Enforcement is (planned): no @Permissions decorators on library.controller.ts endpoints today (OQ-1). Until then the client can pre-emptively hide actions the user's role lacks, using this matrix.