[Buổi 31][Củng cố OOP nâng cao][HW] Bài 3: Role Permission Engine


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Role Permission Engine

Bối cảnh

Một hệ thống quyền có abstract Role với can(action)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_FOUND
  • COUNT action: số user được phép
  • TOP: 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

  1. Abstract Role + Guest/Editor/Admin.
  2. User sở hữu role pointer và virtual destructor.
  3. CHECK/COUNT/TOP.
  4. 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

There are no comments at the moment.

Zalo