các quyền truy cập
Good, the template already fully respects the readonly flag (disables inputs, hides edit/upload buttons, hides admin-only tools). So passing readonly=True for managers is exactly what's needed — they'll see the full profile but can't edit anything. This confirms the fix is correct and complete on the template side; no template changes needed.
Now let me check the diff and package the updated file for you.
Let me quickly sanity-check the file still parses correctly, then hand it over.
Nguyên nhân lỗi: Route /admin/users/<user_id> (hàm employee_detail) chỉ cho phép 2 trường hợp truy cập: role == 'admin' hoặc chính người đó (user_id == session user_id). Trưởng đơn vị (role == 'manager') không nằm trong 2 trường hợp này nên bị abort(403) ngay khi click vào chi tiết nhân viên khác — kể cả khi họ đứng ở trang danh sách hợp đồng (/quan-ly-nhan-su/contract) vốn đã cho manager xem qua decorator @hr_access_required("admin", "manager").
Cách sửa: Tôi đã sửa route đó (trong main.py đính kèm) theo đúng phân cấp bạn muốn:
- Admin: toàn quyền xem + sửa mọi nhân viên.
- Manager (Trưởng đơn vị): được xem chi tiết nhân viên cùng Đơn vị (
group_id) với mình — ở chế độ chỉ xem (readonly), không sửa được để tránh chỉnh nhầm dữ liệu HR người khác. Đây đúng logic "đơn vị" mà hệ thống đang dùng (giống cách route/staff/detail/<id>đã làm cho phần chấm công). - Chính nhân viên đó: vẫn xem + tự sửa hồ sơ mình như cũ.
- Giữ nguyên các luật đặc quyền sẵn có: nhân sự PHÒNG HCNS và người được cấp Level riêng qua trang "Phân quyền Menu" vẫn được vào (và được sửa).
Template employee_detail.html đã sẵn hỗ trợ cờ readonly (disable input, ẩn nút sửa/xóa/upload), nên không cần sửa gì ở HTML — chỉ cần truyền đúng giá trị readonly từ route là đủ.
Lưu ý: nếu bạn muốn phân quyền theo Tổ sản xuất (team_id) thay vì theo Đơn vị (group_id) (ví dụ: 1 đơn vị có nhiều tổ, mỗi tổ có 1 tổ trưởng riêng chỉ xem tổ mình), cho tôi biết — vì hiện hệ thống định nghĩa "Trưởng đơn vị" gắn với group_id, còn team_id (tổ) là cấp nhỏ hơn và chưa có role riêng cho "tổ trưởng". Tôi có thể mở rộng logic nếu bạn cần thêm

