User Story – Secure Editing of In-Store Feedback
As a returning customer using the in-store feedback kiosk,
I want to securely edit only my own previously submitted feedback
by entering my consumer number and a masked 4-digit PIN,
so that I can correct mistakes without exposing my data or someone else’s.
Acceptance Criteria
1. UI / UX
- The kiosk displays an “Edit My Feedback” button only after at least one feedback has been submitted that day.
- When tapped, the customer is prompted for:
- Consumer Number (text field)
- 4-digit PIN (input masked with •)
2. Backend Workflow
| # |
Action |
Details / Rules |
| 1 |
Receive credentials |
consumer_number + masked PIN |
| 2 |
Retrieve feedback |
Lookup by UUIDv4 feedback_id and customer_id |
| 3 |
Verify PIN |
Compare supplied PIN to bcrypt hash (never store raw digits) |
| 4 |
Authorise |
• Exactly one match: load feedback into editor. • No / multiple matches: show “Details not recognised.” |
3. Security & Authorisation
- Customers can edit only their own feedback; cross-customer edits return HTTP 403 – Forbidden.
- Users with the admin role may edit any feedback without PIN verification.
- No plain-text PINs may appear in source, logs, or DB dumps.
- All feedback keeps its original UUIDv4; no collisions allowed.
4. Reference CLI Implementation (in repo)
- Dictionary-based in-memory storage keyed by feedback UUID.
- Masked PIN entry via Python’s
getpass.
- bcrypt hashing for PINs.
- Positive & negative unit tests demonstrating expected behaviour.
5. Documentation
- Explains why UUIDv4 was chosen over random integers.
- Lists adopted security best practices (masking, hashing, key separation, etc.).
Additional Non-Functional Notes
- Accessibility: Masked input remains screen-reader friendly.
- Performance: PIN verification finishes in < 200 ms.
- Auditability: Each edit logs timestamp, anonymised
customer_id, and feedback_id.
User Story – Secure Editing of In-Store Feedback
As a returning customer using the in-store feedback kiosk,
I want to securely edit only my own previously submitted feedback
by entering my consumer number and a masked 4-digit PIN,
so that I can correct mistakes without exposing my data or someone else’s.
Acceptance Criteria
1. UI / UX
2. Backend Workflow
consumer_number+ maskedPINfeedback_idandcustomer_id• No / multiple matches: show “Details not recognised.”
3. Security & Authorisation
4. Reference CLI Implementation (in repo)
getpass.5. Documentation
Additional Non-Functional Notes
customer_id, andfeedback_id.