Phòng ban
Một người được xếp vào phòng ban như thế nào, chế độ thư mục khoá những gì, và cách lấp đầy phòng ban từ nhóm của nhà cung cấp danh tính.
Phòng banPhòng banDepartmentĐơn vị chi trả: sở hữu ngân sách, hạn mức và các mô hình mà thành viên được dùng. Mỗi người thuộc đúng một phòng ban.Mở trong Thuật ngữ là đơn vị chi phí và chính sách mà mọi yêu cầu được tính vào. Ngân sách và giới hạn của phòng ban áp dụng cho mọi người được tính phí ở đó, trừ những người có hạn mức riêng — xem Ngân sách và chính sách.
Quy tắc chính
- Mỗi người thuộc đúng một phòng ban. Không có trạng thái “không phòng ban”: người chưa được xếp nằm trong
GeneralGeneralGeneralPhòng ban có sẵn cho mọi người chưa được phân vào phòng ban khác, để mọi yêu cầu luôn có phòng ban để tính phí.Mở trong Thuật ngữ. - Phòng ban được đọc ở mỗi yêu cầu, từ bản ghi thư mục của người đó — không bao giờ từ token đăng nhập. Việc chuyển phòng ban có hiệu lực ngay yêu cầu kế tiếp, không cần đăng nhập lại.
- Nhóm không bao giờ là thành viên phòng ban. Gán từ một nhómNhómGroupTập hợp người dùng để cấp vai trò và nêu tên trong quy tắc chia sẻ. Một người có thể thuộc nhiều nhóm; nhóm không bao giờ giữ tiền.Mở trong Thuật ngữ chỉ sao chép danh sách người một lần; sửa nhóm sau đó không chuyển ai cả.
- Chế độ thư mục quyết định ai ghi thành viên: portal (
PORTAL) hoặc nhà cung cấp danh tính (IDP). - Chuyển người là chuyển chi phí của họ, và có thể mở rộng hoặc thu hẹp các mô hình họ được dùng.
Điều gì xảy ra ở mỗi yêu cầu
- Portal đọc bản ghi thư mục của người dùng. Không có bản ghi thì không có quyền truy cập.
- Portal lấy phòng ban của họ —
Generalnếu chưa từng được xếp. - Nếu phòng ban đó chặn mô hình đã chọn, lượt bị từ chối.
- Nếu không, lời gọi chạy trên khoá của phòng ban, hoặc khoá riêng nếu người đó có hạn mức riêng.
- Ngân sách lấy từ cấp chính sách thắng, và chi phí được tính vào phòng ban.
Các cách vào một phòng ban
| Cách | Diễn ra thế nào |
|---|---|
| Được cấp tài khoản mà chưa có phòng ban | Vào phòng ban hệ thống General |
| Chuyển từng người | Quản trị viên chuyển một người (PATCH /users/:id) |
| Gán hàng loạt từ một nhóm | Quản trị viên gán các thành viên của nhóm (POST /groups/:id/assign-department) |
Nhóm của nhà cung cấp được gắn vào, chỉ ở chế độ IDP | Phân giải phòng ban, bên dưới |
Mọi cách đều ghi vào bản ghi của chính người đó; không có gì đọc nhóm lúc xử lý yêu cầu. Chỉ nhóm được gắn ở chế độ IDP mới chuyển người khi thành viên của nó thay đổi phía nhà cung cấp.
Gán hàng loạt và rà soát xung đột
Gán hàng loạt mở rộng nhóm một lần và tính phí mọi người chưa thuộc phòng ban đích vào phòng ban đó. Không lưu quan hệ thành viên, nên sửa nhóm sau này không chuyển ai. Kết quả liệt kê từng người đã chuyển và phòng ban cũ của họ.
Phòng ban General và phòng ban đã lưu trữ
Generallà một phòng ban thật. Ai ở trong đó đều được báo làGeneral. Trang của nó trong Admin console (bảng điều khiển quản trị) liệt kê và nhận thành viên như mọi phòng ban khác, nhưng không có nút gỡ — gỡ ai khỏi một phòng ban nghĩa là đưa họ vềGeneral.- Phòng ban đã lưu trữ không bao giờ nhận thêm ai. Không bộ chọn nào hiển thị nó, và lời mời chỉ định nó sẽ bị từ chối khi được chấp nhận.
Ai sở hữu trường nào
Quyền truy cập bị chặn bởi hai trường do hai bên sở hữu, và cả hai đều phải cho phép.
| Trường | Bên sở hữu | Được ghi bởi |
|---|---|---|
email, displayName, status, external_id | Nhà cung cấp danh tính | SCIM |
| Tên, external id và thành viên của nhóm đồng bộ | Nhà cung cấp danh tính | SCIM Groups |
suspended_at | Portal | Tạm ngưng / bỏ tạm ngưng |
department_id, org_role, thành viên nhóm thủ công | Portal | Thao tác quản trị ở chế độ PORTAL; phân giải phòng ban ở chế độ IDP |
| Vai trò mà nhóm cấp và quy tắc phạm vi hiển thị | Portal | Thao tác quản trị, cả hai chế độ |
| Tên, mô tả, trung tâm chi phí và ngân sách của phòng ban | Portal | Thao tác quản trị, cả hai chế độ |
Bản thân phòng ban luôn do portal sở hữu: không nhà cung cấp danh tính nào mang ngân sách hay trung tâm chi phí, và schema Group lõi của SCIM không có trường mô tả.
Portal không ghi ngược về Keycloak hay Entra ID; SCIM chỉ chạy một chiều. Vì vậy quản trị viên không đặt được status; để cắt quyền ngay, hãy tạm ngưng người đó. Tạm ngưng cũng vô hiệu hoá tài khoản Keycloak, chặn đăng nhập mới và gia hạn phiên. Bản ghi portal được ghi trước, nên nếu nhà cung cấp không phản hồi, quyền truy cập vẫn bị từ chối. Bỏ tạm ngưng chỉ bật lại tài khoản khi nhà cung cấp vẫn báo đang hoạt động — đây không phải cách kích hoạt lại người mà nhà cung cấp đã vô hiệu hoá.
Chế độ thư mục
Mỗi tổ chức chọn chế độ thư mục một lần, khi tạo.
| Chế độ | Ai sở hữu thư mục |
|---|---|
PORTAL (mặc định) | Portal sở hữu ai tồn tại, nhóm của họ và phòng ban của họ |
IDP | Nhà cung cấp bên ngoài sở hữu; thư mục đến qua SCIMCấp tài khoản qua SCIMSCIM provisioningChuẩn mà nhà cung cấp danh tính dùng để tự động tạo, cập nhật và xoá tài khoản portal, để người nghỉ việc mất quyền truy cập.Mở trong Thuật ngữ và portal từ chối ghi. Quyền tính năng AI vẫn do portal quản lý |
Ở chế độ IDP | Thao tác ghi |
|---|---|
Bị từ chối (409 directory_frozen) | Tạo người dùng, đặt phòng ban cho người dùng, tạo nhóm, thêm hoặc gỡ thành viên, gán hàng loạt từ nhóm, gửi hoặc gửi lại lời mời |
| Mở ở cả hai chế độ | Vòng đời phòng ban (tạo, đổi tên, lưu trữ, đặt mặc định), những gì nhóm cấp, vai trò và quyền hạn, quy tắc phạm vi hiển thị, mô hình bị chặn, chính sách, ngân sách, tạm ngưng, phòng ban tính phí những nhóm nào và độ ưu tiên, rút lời mời đang mở, danh sách chờ |
Lỗi trả về là xung đột (409) chứ không phải lỗi quyền, vì trạng thái của tổ chức quyết định — kể cả Org Owner cũng bị từ chối. Rút lời mời vẫn mở vì một quyền không nên tồn tại phải luôn thu hồi được.
Chỉ “đặt phòng ban cho người dùng” bị khoá, nên mỗi chế độ có đúng một bên ghi phòng ban của một người. Lưu trữ phòng ban còn thành viên vẫn được, vì tác vụ lưu trữ chuyển người trực tiếp.
Phòng ban từ nhóm
Ở chế độ IDP bạn không chuyển người thủ công được, nên bạn gắn phòng ban với một danh sách nhóm của nhà cung cấp. Phòng Sales thường là Sales-VN + Sales-KH + một nhóm trưởng nhóm. Một nhóm chỉ tính phí cho tối đa một phòng ban.
Lưu một lựa chọn sẽ thay toàn bộ danh sách, nên không ai bị tính phí hai nơi giữa chừng. Danh sách rỗng nghĩa là gỡ gắn. Ở chế độ PORTAL thao tác này bị từ chối (409 directory_portal_owned), vì lần phân giải kế tiếp sẽ đảo ngược việc quản trị viên đã chuyển.
Lựa chọn bị chặn nếu nó khiến một người nằm trong nhóm của hai phòng ban đang hoạt động; thông báo nêu số người. Nhóm không được gắn và phòng ban đã lưu trữ không tính phí ai. Trùng lặp trong cùng một lựa chọn thì không sao — người thuộc cả Sales-VN và Sales-Leads vẫn tính vào Sales.
Phân giải
Phân giải chỉ chạy ở chế độ IDP. Trong các phòng ban đang tính phí một nhóm mà người đó thuộc về:
- Số ưu tiên thấp nhất thắng; hoà thì xét theo id phòng ban. Chỉ cần khớp một nhóm bất kỳ của phòng ban.
- Phòng ban đã lưu trữ không bao giờ nhận ai.
- Người không thuộc nhóm nào được gắn sẽ về
General.
Phân giải chỉ ghi khi kết quả thay đổi, và chạy khi nhóm được cấp, cập nhật hoặc xoá, khi người dùng được cấp, và khi lựa chọn thay đổi — không chạy khi bạn sửa độ ưu tiên. Tổ chức đã gỡ gắn phòng ban cuối cùng vẫn đưa thành viên về mặc định.
Khi nhà cung cấp xoá một nhóm đang được gắn, liên kết mất theo; phòng ban giữ nguyên tên, ngân sách, trung tâm chi phí và lịch sử kiểm tra. Khi nhóm cuối cùng mất, thành viên về General ở lần phân giải kế tiếp. Danh sách hiển thị mỗi phòng ban đang tính phí những nhóm nào.
Vì sao lại như vậy
Vì sao đọc phòng ban từ thư mục mà không từ token?
Token tồn tại đến khi hết hạn. Đọc bản ghi ở mỗi yêu cầu giúp việc chuyển phòng ban có hiệu lực ngay yêu cầu kế tiếp, không bắt ai đăng nhập lại.
Vì sao portal không ghi ngược về Entra ID?
Kênh ghi ngược cần quyền ghi thư mục trên toàn tenant, và đồng bộ từ hệ thống nhân sự cũng sẽ ghi đè lên. SCIM giữ một chiều; tạm ngưng là đòn bẩy riêng của portal.
Vì sao nhóm bị xoá phía nhà cung cấp không lưu trữ phòng ban?
Phòng ban do quản trị viên tạo, mang ngân sách và lịch sử. Từ chối việc xoá sẽ khiến nhà cung cấp thử lại mãi, nên portal bỏ liên kết và giữ phòng ban.
Bên dưới
Route nhóm nguồn và các lỗi
| Route | Từ chối với |
|---|---|
PUT /departments/:id/source-groups | 409 directory_portal_owned, source_group_taken, source_group_overlaps; 404 nhóm không tồn tại |
PATCH /departments/{id} | Độ ưu tiên âm |
Mỗi liên kết là một dòng trong bảng riêng, được giải phóng bởi khoá ngoại khi nhóm bị xoá phía nhà cung cấp, với chỉ mục duy nhất để một nhóm tính phí tối đa một phòng ban. Body mang id nhóm của portal. Tên và mô tả được sửa qua PATCH /departments/{id}.
Nơi đặt chốt kiểm tra thư mục
Chốt directory_frozen nằm trong các use case, nên CLI harness cũng gặp nó dù không qua HTTP. SCIM ghi qua repository riêng và không cần ngoại lệ. Chế độ được kiểm tra ở mỗi lần gọi, không dùng cache, và các trigger SCIM ghi log lỗi mà không ném lại — lỗi 500 trên một thao tác đã được chấp nhận sẽ khiến nhà cung cấp thử lại mãi.