Showcase curation, account control & backend hardening
Tách rõ Showcase khỏi Portfolio, khóa tự đăng ký mặc định và bổ sung quản trị thành viên an toàn.
- Portfolio là hồ sơ quá trình và minh chứng; người dùng đã đăng nhập vẫn có thể xem project Internal theo quyền nội bộ trường.
- Showcase trở thành khu triển lãm được Admin chọn riêng: chỉ project Published + Public + bật Portfolio + bật Showcase mới xuất hiện.
- Tự đăng ký tài khoản mặc định tắt; Admin có công tắc bật/tắt trong Users. Khi tắt, register.php cũng chặn ở backend.
- Admin có thể xóa thành viên; hệ thống chặn tự xóa, chặn xóa admin cuối cùng và chặn xóa người vẫn đang là Owner của project.
- Khi xóa user hợp lệ, các liên kết mentor/member/version/file được dọn an toàn và tên thành viên trong dữ liệu nhóm vẫn được giữ lại.
- Chặn cả việc disable/đổi role/xóa Admin hoạt động cuối cùng để tránh khóa trang quản trị.
- Vá rò rỉ metadata Internal trong Individual Portfolio; sửa đường /workspace/<slug> để mentor được giao mở đúng quyền review.
- Siết session cookie, security headers và thông báo lỗi backend; Owner trong Project Admin chỉ chọn từ tài khoản Student đang hoạt động.
- Sửa đường phục vụ ảnh Portfolio Media qua endpoint có kiểm tra quyền, tránh ảnh lỗi do thư mục uploads bị khóa.
- Dọn runtime error_log khỏi package và chặn truy cập trực tiếp file tài liệu/log/SQLite nhạy cảm ở web root.
