[Buổi 31][Củng cố OOP nâng cao][HW] Bài 3: Role Permission Engine
Role Permission Engine
Bối cảnh
Một hệ thống quyền có abstract Role với can(action) và rank(). Guest cho phép READ; Editor cho READ,WRITE; Admin cho READ,WRITE,DELETE. Mỗi User có id và một Role object. Hệ thống hỗ trợ:
CHECK id action: ALLOW/DENY/NOT_FOUNDCOUNT action: số user được phépTOP: user có role rank cao nhất; tie ID tăng.
Bài Medium dùng polymorphism làm policy engine; manager không chứa chuỗi if/else theo role trong mỗi query.
B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.
B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.
Yêu cầu
- Abstract Role + Guest/Editor/Admin.
- User sở hữu role pointer và virtual destructor.
- CHECK/COUNT/TOP.
- Không switch role ở query phase.
Input
Dòng 1 n; n dòng id G/E/A; dòng q; q query.
Output
Mỗi query một dòng.
Ràng buộc
1≤n,q≤5000, ID unique.
Ví dụ 1
Input
3
U1 G
U2 E
U0 A
5
CHECK U1 WRITE
CHECK U2 WRITE
COUNT DELETE
TOP
CHECK X READ
Output
DENY
ALLOW
1
U0
NOT_FOUND
Giải thích
U1 Guest không WRITE nên DENY; U2 Editor WRITE nên ALLOW. DELETE chỉ Admin U0 có nên COUNT1. TOP chọn Admin U0. CHECK user X không tồn tại nên NOT_FOUND.
Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.
Ví dụ 2
Input
2
A G
B G
3
COUNT READ
COUNT WRITE
TOP
Output
2
0
A
Giải thích
Hai Guest đều READ nên COUNT READ=2, không ai WRITE nên0. TOP rank hòa nên ID A nhỏ hơn B, output A.
Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.
Thông tin học tập
- Module: M08
- Buổi: B31
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: abstract role, virtual permission score, polymorphic users, command queries
- Giới hạn kiến thức: B01-B31
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments