Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Phân cấp vai trò trong RBAC

    RBAC nâng cao cho phép các vai trò được tổ chức theo phân cấp (role hierarchy): nếu vai trò AAA kế thừa vai trò BBB thì AAA tự động có tất cả quyền trực tiếp của BBB, và kế thừa này có tính bắc cầu (nếu AAA kế thừa BBB, BBB kế thừa CCC thì AAA cũng có quyền của CCC). Một vai trò có thể kế thừa nhiều vai trò khác, và đồ thị kế thừa được đảm bảo không có chu trình.

    Cho danh sách vai trò cùng quyền trực tiếp (mỗi quyền là một token dạng resource:action), danh sách quan hệ kế thừa, danh sách người dùng (mỗi người dùng được gán đúng một vai trò), và danh sách truy vấn user perm, hãy xác định người dùng có quyền perm hay không (tính cả quyền kế thừa).

    Ví dụ

    Input:

    3
    Manager 1 DB:admin
    Staff 2 DB:read DB:write
    Intern 1 DB:read
    2
    Manager Staff
    Staff Intern
    3
    Alice Manager
    Bob Staff
    Cara Intern
    5
    Alice DB:admin
    Alice DB:write
    Cara DB:write
    Bob DB:read
    Dave DB:read
    

    Output:

    YES
    YES
    NO
    YES
    NO
    

    Giải thích: Alice giữ vai trò Manager, kế thừa Staff và (qua Staff) Intern, nên có cả DB:admin, DB:read, DB:write; Cara chỉ giữ Intern nên không có DB:write; Dave không tồn tại nên bị từ chối.

    • Định dạng đầu vào:

      Dòng 1: số nguyên r — số vai trò (1≤r≤2001 \le r \le 2001≤r≤200). Với mỗi vai trò: dòng roleName k perm_1 ... perm_k (0≤k≤200 \le k \le 200≤k≤20) liệt kê quyền trực tiếp.

      Dòng tiếp theo: số nguyên e — số quan hệ kế thừa (0≤e≤4000 \le e \le 4000≤e≤400), rồi e dòng roleA roleB nghĩa là roleA kế thừa toàn bộ quyền của roleB. Đồ thị kế thừa được đảm bảo không có chu trình.

      Dòng tiếp theo: số nguyên u — số người dùng (1≤u≤2001 \le u \le 2001≤u≤200), rồi u dòng userName roleName.

      Dòng tiếp theo: số nguyên q — số truy vấn (0≤q≤5000 \le q \le 5000≤q≤500), rồi q dòng userName perm.

    • Định dạng đầu ra:

      In ra q dòng, mỗi dòng YES nếu người dùng (thông qua vai trò được gán, kể cả quyền kế thừa bắc cầu) có quyền perm, ngược lại NO. Nếu userName hoặc vai trò của người dùng không tồn tại, in NO.

    Ví dụ:

    Đầu vào:

    3
    Manager 1 DB:admin
    Staff 2 DB:read DB:write
    Intern 1 DB:read
    2
    Manager Staff
    Staff Intern
    3
    Alice Manager
    Bob Staff
    Cara Intern
    5
    Alice DB:admin
    Alice DB:write
    Cara DB:write
    Bob DB:read
    Dave DB:read
    

    Đầu ra:

    YES
    YES
    NO
    YES
    NO
    

    Đầu vào:

    1
    Solo 0
    0
    1
    X Solo
    1
    X A:a
    

    Đầu ra:

    NO
    

    Đang tải editor...