Bài 1 — Lần đầu đăng nhập & khởi tạo quyền quản trị
Đối tượng: quản trị viên hệ thống, ngay sau deploy đầu tiên. Bối cảnh: database mới hoàn toàn. Phân quyền fail-closed nên chưa ai có quyền gì, kể cả bạn. Thời gian: ~10 phút.
Các bước
- Mở
https://agentjira.yourcompany.com. Cloudflare Access yêu cầu đăng nhập SSO. - Sau khi qua SSO, bạn vào được UI nhưng danh sách Space trống và mọi hành động trả 403 — đúng như thiết kế, chưa phải lỗi.
- Trên server, đặt email của bạn vào biến bootstrap (
/opt/agentjira/.env):
AGENTBOARD_BOOTSTRAP_OWNERS=lead@yourcompany.com
- Restart server và xác nhận grant:
docker compose -f docker-compose.prod.yml up -d agentjira_server
docker compose -f docker-compose.prod.yml logs agentjira_server | grep '\[rbac\]'
# → [rbac] applied 1 bootstrap owner grant(s) from AGENTBOARD_BOOTSTRAP_OWNERS
- Refresh UI → bạn là
ownertrên mọi Space đang tồn tại.
Xác minh
curl http://<host>/api/me
# → {"type":"human","email":"lead@yourcompany.com"}
curl http://<host>/api/projects
# → danh sách không rỗng
- Thấy log
[rbac] applied … bootstrap owner grant(s). -
GET /api/metrảtype: human+ đúng email;GET /api/projectskhông rỗng.
Khác biệt theo môi trường
- Production
- DEV FULL-STACK
- DEV-LITE
Làm đúng 5 bước trên. Lệnh grant idempotent — vừa là đường khởi tạo lần đầu, vừa là đường break-glass khi mất hết admin sau này.
Chạy y như production: DEV_USER_EMAIL được đưa vào AGENTBOARD_BOOTSTRAP_OWNERS,
script kiểm chứng dòng log [rbac] applied. Dùng mode này để học và demo quy trình thật.
Bước này không cần: AGENTBOARD_DEV_IDENTITY=1 cấp owner cho mọi request từ loopback.
Đừng dùng DEV-LITE để học phân quyền — mọi thứ đều pass nên bạn không thấy 403 thật.
Bài tiếp theo: Bài 2 — Tạo Space đầu tiên.