Ví dụ: phân quyền cho một tổ chức
Đi từ một tổ chức trống tới bốn chính sách chạy được — cây đơn vị, lượt gán, phân loại theo đơn vị, bốn lượt cấp quyền, và bảng cho thấy từng người chạm tới đúng những hồ sơ nào.
Điều chúng ta muốn
Trước khi nói tới bất kỳ công tắc nào, hãy nói bằng lời thường xem tổ chức này cần gì. Bốn người, bốn nhu cầu khác nhau, trên cùng một tập hồ sơ:
- Cán bộ thụ lý chỉ được thấy hồ sơ của chính mình — hồ sơ của người ngồi cùng phòng cũng không.
- Trưởng nhóm được thấy mọi hồ sơ của phòng mình, nhưng chỉ được sửa hồ sơ của chính mình.
- Giám đốc vùng được đọc mọi hồ sơ ở mọi phòng trong vùng của mình, và cũng chỉ được sửa hồ sơ của chính mình.
- Kiểm toán viên được đọc mọi thứ trong tổ chức và không được sửa gì cả.
Đọc lại bốn dòng đó và để ý một điều: ba dòng cuối không dòng nào diễn đạt được bằng một "mức quyền" duy nhất. Trưởng nhóm đọc rộng hơn sửa. Giám đốc vùng đọc rộng hơn nữa mà vẫn sửa hẹp y hệt trưởng nhóm. Kiểm toán viên đọc rộng nhất và sửa bằng không. Đó là lý do quyền được cấp riêng cho từng thao tác, chứ không phải xếp người vào các bậc "xem / sửa / quản trị".
Cả ví dụ này diễn ra trên đúng một thực thể — Hồ sơ vụ việc — và phần lớn nằm trên đúng một màn hình: tab Quyền truy cập của thực thể đó.

Dựng cây đơn vị
Vào Quản trị → Đơn vị tổ chức và dựng cây này:
HQ
├── North
│ ├── Accounts Payable mã AP
│ └── Human Resources mã HR
└── South
Shared Services một gốc thứ hai, không nằm dưới HQ
Legacy Ops một gốc thứ ba, đã lưu trữNorth là chỗ mọi thứ thú vị neo vào: nó có hai đơn vị con, nên khác biệt giữa Đơn vị và Cây con nhìn thấy được ngay tại đó, và nó có một đơn vị anh em là South để cho thấy phần bị loại ra.
Shared Services nhắc rằng cây đơn vị là một rừng — nhiều đơn vị cấp cao nhất là hợp lệ. Legacy Ops đã lưu trữ: nó vẫn hiện trong cây và vẫn giữ được các quyền đã neo vào nó, nhưng không nhận thêm đơn vị con, lượt gán hay điểm neo mới.
Dựng xong cây này, chưa ai có thêm một quyền nào cả. Đơn vị không phải một vai trò nhẹ. Cho tới hết mục Viết bốn chính sách bên dưới, không hồ sơ nào đổi chủ và không ai thấy thêm hay bớt bất cứ thứ gì.
Xếp người vào đơn vị
Vẫn trên trang đó, dùng thẻ Gán đơn vị ở cột phải để xếp ba người vào cây:
| Người | Đơn vị | Đơn vị chính |
|---|---|---|
| Vũ Quốc Bảo | South | Có |
| Nguyễn Thị Hà | North | Có |
| Trần Văn Lân | North | Không |
Với bốn chính sách sắp viết — vốn chỉ dùng phạm vi Của mình, phạm vi có neo và Toàn tổ chức — lượt gán đóng góp đúng một thứ vào việc phân quyền: nó cung cấp đơn vị mặc định cho hồ sơ mới mà người đó tạo ra. Nó không mở rộng tầm với, không làm hồ sơ nào hiện ra, và không thay được một lượt cấp quyền. Xếp Hà vào North không cho cô ấy thấy hồ sơ nào của North cả. (Một lượt cấp quyền dùng phạm vi theo lượt gán — mục cuối phần viết chính sách — thì ngược lại đọc đúng các lượt gán này.)
Hai chi tiết trong bảng trên sẽ hiện lên báo cáo Tình trạng phân quyền, và cả hai đều đúng như mô tả. Bảo còn được gán vào Legacy Ops đã lưu trữ — một lượt gán vào đơn vị đã lưu trữ. Lân thì không có đơn vị chính ở bất cứ đâu, nên một lệnh tạo hồ sơ không chỉ định đơn vị của anh ấy sẽ thất bại. Báo cáo nêu tên chúng; việc sửa vẫn do người thực hiện.
Bật phân loại theo đơn vị
Hai trong bốn chính sách sắp viết dùng phạm vi Đơn vị hoặc Cây con, mà hai phạm vi đó so khớp trên đơn vị mà hồ sơ được lưu vào. Trên một thực thể chưa phân loại, giá trị ấy không tồn tại — nên hai nút đó bị vô hiệu và chính sách từ chối thẳng. Việc này phải làm trước, không phải làm sau.
Mở Quản trị → Thực thể, chọn Hồ sơ vụ việc, sang tab Quyền truy cập, rồi dùng thẻ Phân loại theo đơn vị ở trên cùng: Gán đơn vị… cho tới khi không còn hồ sơ nào trống đơn vị, Chạy lại kiểm tra trước, rồi Bật phân loại.
Sau bước này bốn hồ sơ của ví dụ nằm như sau:
| Hồ sơ | Đơn vị | Chủ sở hữu |
|---|---|---|
| HS-001 | Accounts Payable | Nguyễn Thị Hà |
| HS-002 | Accounts Payable | Trần Văn Lân |
| HS-003 | Human Resources | Trần Văn Lân |
| HS-004 | South | Vũ Quốc Bảo |
Việc bật bị từ chối chừng nào còn bất kỳ hồ sơ nào chưa có đơn vị, và thông báo nêu rõ số lượng. Trên một thực thể đã có hàng nghìn hồ sơ cũ, đây là phần tốn thời gian nhất của cả trang này — hãy làm nó trước khi hứa với ai về ngày bật.
Viết bốn chính sách
Trên thẻ Quyền truy cập thực thể, chuyển chế độ từ Mọi người sang Hạn chế, rồi nhấn Thêm lượt cấp quyền bốn lần. Với mỗi lượt, chọn chủ thể ở bước đầu, rồi ở bước sau chọn một phạm vi cho từng dòng trong năm dòng Xem, Liệt kê, Tạo, Sửa, Xóa.
| Cấp cho | Xem | Liệt kê | Tạo | Sửa | Xóa |
|---|---|---|---|---|---|
| Nguyễn Thị Hà — cán bộ thụ lý | Của mình | Của mình | Toàn tổ chức | Của mình | — |
| Nhóm trưởng nhóm AP — trưởng nhóm | Đơn vị ▪ AP | Đơn vị ▪ AP | Đơn vị ▪ AP | Của mình | — |
| Trần Văn Lân — giám đốc vùng | Cây con ▾ North | Cây con ▾ North | — | Của mình | — |
| Nhóm Kiểm toán — kiểm toán viên | Toàn tổ chức | Toàn tổ chức | — | — | — |
Một dấu gạch trong bảng nghĩa là thao tác đó không được cấp, và ở chế độ hạn chế điều đó phân giải thành không hồ sơ nào — không phải "không lọc". Riêng cột Tạo được xét trên chủ sở hữu và đơn vị đích mà lượt tạo đề xuất, chứ không phải trên một hồ sơ đã có; Tạo · Toàn tổ chức của Hà nghĩa là cô ấy nộp hồ sơ mới vào đâu cũng được.
Hai trong bốn lượt cấp quyền trên trỏ tới một nhóm, không phải một người. Nhóm là chủ thể cấp quyền hợp lệ, ngang hàng với người dùng và chủ thể dịch vụ — thêm ai đó vào Nhóm Kiểm toán là cách bàn giao quyền kiểm toán mà không phải mở lại chính sách. Nhóm không mang mức trần quyền của riêng nó; mỗi thành viên vẫn phải có quyền vai trò tương ứng. Xem Nhóm và Vai trò & quyền.
Vì sao không lượt nào trong bốn lượt này bật dòng tư vấn neo
Trình soạn lượt cấp quyền có một dòng tư vấn dành cho phạm vi mang neo trỏ sang một nhánh khác với mọi đơn vị mà chủ thể đang đứng. Bốn lượt trên không lượt nào bật nó, và mỗi lượt vì một lý do khác nhau: Lân đứng ở North và neo đúng vào Cây con ▾ North, nên neo và chỗ đứng nằm trên cùng một nhánh; Nhóm trưởng nhóm AP có neo nhưng chủ thể là một nhóm, mà nhóm thì bị bỏ qua hoàn toàn — nhóm không đứng ở đâu trong cây, các thành viên của nó mới đứng; Hà và Nhóm Kiểm toán chỉ dùng Của mình và Toàn tổ chức, hai phạm vi không mang neo. Vậy nên khi dựng lại đúng bốn lượt này mà không thấy dòng tư vấn đâu, đừng kết luận là nó không có — mục Để tự động hóa chạy được bên dưới còn soạn thêm một lượt cấp quyền nữa, và lượt ấy thì bật nó.
Sửa đúng một chỗ trong bốn lượt trên là nó cũng hiện ra ngay tại đây: đổi neo của giám đốc vùng sang Cây con ▾ South trong khi anh ấy vẫn đứng ở North. Lượt cấp quyền đó lưu đúng như đã soạn và thực sự mở nhánh South cho anh ấy — dòng tư vấn có mặt đúng cho tình huống này, vì trên màn hình nó đọc như một quyền chạy được, trong khi thứ nó mở ra là nhánh bên cạnh chứ không phải nhánh của người được cấp. Xem Quyền truy cập Thực thể & Bản ghi.
Nếu người bấm nút chuyển sang Hạn chế không phải quản trị viên vượt quyền, thao tác đó còn ghi thêm một lượt cấp quyền cho chính họ — Thiết kế cùng Xem và Liệt kê phạm vi toàn tổ chức. Đó là chốt chống tự khóa, không phải lượt cấp quyền thứ năm của ví dụ này. Giao diện hiện bản xem thử trước khi ghi.
Khi yêu cầu là đối xứng: một lượt cấp quyền thay cho bốn mươi
Bốn chính sách trên đều bất đối xứng — mỗi lượt nêu đích danh ai với tới đâu, và phạm vi có neo là công cụ đúng cho việc đó. Nhưng thử đổi yêu cầu của trưởng nhóm thành dạng đối xứng: mỗi trưởng nhóm thấy hồ sơ của đơn vị mình, trên bốn mươi đơn vị thay vì một. Viết theo kiểu trên là bốn mươi nhóm và bốn mươi lượt cấp quyền, mỗi lượt neo vào một đơn vị — và mỗi lần thuyên chuyển là một lần mở lại chính sách.
Phạm vi Đơn vị của họ gói cả bốn mươi lượt ấy vào một dòng: một nhóm Trưởng nhóm duy nhất, một lượt cấp quyền Xem / Liệt kê / Tạo · Đơn vị của họ — và mỗi thành viên chạm tới đúng đơn vị mà chính họ được gán vào, không hơn. Chuyển một trưởng nhóm sang đơn vị khác ở Đơn vị tổ chức là tầm với của họ đi theo ngay, không ai đụng tới chính sách. Cần thêm cả các đơn vị cấp dưới thì dùng Đơn vị của họ và mọi cấp bên dưới. Hai điều phải nhớ khi đi đường này: thành viên chưa được gán vào đơn vị nào thì không thấy gì cả — báo cáo Tình trạng phân quyền nêu đích danh trường hợp ấy — và lượt cấp quyền của ví dụ này vẫn giữ nguyên dạng có neo, vì AP chỉ có một nhóm trưởng và cấu trúc bốn hồ sơ cần thấy được cả hai phạm vi. Xem Quyền truy cập Thực thể & Bản ghi.
Kết quả
Đây là toàn bộ chính sách trên, đọc theo chiều ngược lại: mỗi ô là những gì người ở đầu dòng thực sự làm được với hồ sơ ở đầu cột.
| HS-001 (AP · Hà) | HS-002 (AP · Lân) | HS-003 (HR · Lân) | HS-004 (South · Bảo) | |
|---|---|---|---|---|
| Hà — xem/sửa của mình | xem + sửa | — | — | — |
| Trưởng nhóm AP — xem đơn vị ▪ AP | xem | xem | — | — |
| Giám đốc — xem cây con ▾ North, sửa của mình | xem | xem + sửa | xem + sửa | — |
| Kiểm toán — xem toàn tổ chức | xem | xem | xem | xem |
Của mình không phải Đơn vị. Hà đứng ở North và HS-002 nằm ngay trong đơn vị con nơi cô ấy làm việc, vậy mà cô ấy không chạm tới được. Quyền của cô ấy chỉ đọc đúng một dữ kiện: ai sở hữu hồ sơ.
Đơn vị không phải Cây con. Trưởng nhóm AP với tới cả hai hồ sơ ở AP và trượt mất HS-003 ở HR — cách đúng một cấp, ngay bên cạnh, dưới cùng một đơn vị cha.
Cây con dừng lại ở điểm neo của nó. Giám đốc với tới mọi thứ dưới North và không bao giờ với tới HS-004 ở South. Cây con là một nhánh có điểm neo, không phải toàn tổ chức.
Xem không phải Sửa. Giám đốc đọc được ba hồ sơ và chỉ đổi được hai hồ sơ do chính anh ấy sở hữu; HS-001 là của Hà, anh ấy đọc được mà không đụng vào được. Trưởng nhóm AP cũng cầm Sửa · Của mình mà không đổi được gì ở đây, vì không sở hữu hồ sơ nào trong bốn hồ sơ này. Đây chính là dòng mà lưới phạm vi theo từng thao tác tồn tại để diễn đạt, và là điều một mô hình "mức quyền" không nói ra được.
Một dấu gạch không phải "tất cả". Kiểm toán viên không có quyền Sửa, nên kiểm toán viên không sửa được gì. Một thao tác không được cấp phân giải thành không hồ sơ nào.
Bất kỳ ô nào trong bảng cũng dựng lại được trên máy: dùng thẻ Giải thích quyền truy cập ngay dưới danh sách cấp quyền, chọn chủ thể, thao tác và hồ sơ rồi nhấn Giải thích. Câu trả lời đến từ chính phép phân giải mà màn hình duyệt dùng, nên nó không thể lệch với bảng này.
Để tự động hóa chạy được
Mỗi đêm, hóa đơn rơi vào một thư mục theo dõi được quy trình Nhập hóa đơn đêm biến thành Hồ sơ vụ việc. Không ai bấm nút cả — quy trình khởi chạy theo lịch.
Vì vậy chính sách Chạy với tư cách của nó không thể là Người khởi chạy: một lượt khởi chạy theo lịch không có ai là người khởi chạy, và việc bật lịch trên một quy trình đang để Người khởi chạy bị từ chối thẳng. Hãy quyết định chính sách trước, rồi mới bật lịch.
Quy trình chạy với tư cách chủ thể dịch vụ Invoice Import. Để nó làm được việc, chủ thể đó cần đủ ba thứ, thiếu một thứ là hỏng — riêng thứ ba có hai cách làm:
| Thứ cần có | Đặt ở đâu | Vì sao cần |
|---|---|---|
Quyền thô entity.write qua một vai trò | Thẻ Vai trò trên trang chi tiết chủ thể dịch vụ. | Vai trò là mức trần. Thiếu nó thì lượt cấp quyền bên dưới nằm đó mà không có tác dụng. |
| Một lượt cấp quyền trên Hồ sơ vụ việc với Tạo · Đơn vị ▪ Accounts Payable | Tab Quyền truy cập của thực thể. | Thực thể đang ở chế độ hạn chế: không có quyền phù hợp nghĩa là không hồ sơ nào. |
| Một đích cho hồ sơ mới: một lượt gán vào Accounts Payable đặt làm đơn vị chính, hoặc ô Đơn vị đích (Destination unit) của bước trỏ thẳng vào đơn vị đó | Quản trị → Đơn vị tổ chức, hoặc bảng thuộc tính của bước Bản ghi thực thể trong trình thiết kế. | Đơn vị chính là đường mặc định: bước để nguyên Đơn vị của chủ thể (Principal's unit) sẽ giải ra đúng nó, nên hồ sơ rơi đúng chỗ mà không cần bước nào chỉ định. Đặt Đơn vị đích sang Một đơn vị (A unit) ▪ Accounts Payable thì chính bước nêu đích, và lượt gán không còn cần nữa. |
Đi đường Đơn vị đích thì trình soạn quyền nhắc một câu
Chọn nhánh thứ hai ở dòng cuối bảng — không gán Invoice Import vào đơn vị nào, để chính bước nêu đích — thì chủ thể này không đứng ở đâu trong cây đơn vị. Ngay khi lượt cấp quyền Tạo · Đơn vị ▪ Accounts Payable được soạn, bước Phạm vi hiện dòng: "Tạo neo tại Accounts Payable, và Invoice Import không thuộc đơn vị nào. Phạm vi có neo vẫn trỏ tới đúng đơn vị được nêu bất kể chỗ đứng của chủ thể, nên bản cấp quyền này lưu đúng như đã soạn và thực sự trao quyền đó."
Đó là tư vấn, không phải từ chối: nút Lưu lượt cấp quyền vẫn hoạt động và lượt cấp quyền có hiệu lực đúng như câu trên nói. "Chủ thể không thuộc đơn vị nào" chỉ đáng đọc một lần trước khi bấm lưu, chứ không phải một chỗ cần sửa. Đi nhánh thứ nhất — gán vào Accounts Payable và đặt làm đơn vị chính — thì neo và chỗ đứng trùng nhau, và trình soạn im lặng. Xem Quyền truy cập Thực thể & Bản ghi.
Quy trình này chống trùng bằng cách nào
Hóa đơn đêm nào cũng có thể rơi vào lại, nên Nhập hóa đơn đêm cần biết một hồ sơ đã tồn tại hay chưa trước khi tạo. Ở đây Upsert không dùng được: nó đòi chủ thể có phạm vi Xem · Toàn tổ chức trên thực thể, mà phạm vi Xem của Invoice Import không rộng tới vậy. Còn lại là Get one theo Key, rồi rẽ nhánh.
Điểm cần biết: một khóa định danh là quy tắc duy nhất trên toàn bộ thực thể, kể cả những hồ sơ nằm ngoài phạm vi Xem của chủ thể này. Khi khóa khớp đúng một hồ sơ như thế — chẳng hạn một hồ sơ đã được lập ở nhánh khác của sơ đồ tổ chức — lượt chạy dừng lại với nguyên nhân scope_mismatch chứ không báo là chưa có: quản trị viên phải quyết định, thay vì để quy trình lặng lẽ tạo lại một hồ sơ đã có. Xem Bản ghi thực thể.
Ngoài ra công tắc Được phép sở hữu hồ sơ của Invoice Import phải bật. Các bước sau trong chính quy trình đọc lại những hồ sơ nó vừa tạo theo phạm vi Của mình, mà một phạm vi own trỏ tới chủ thể không được phép sở hữu thì không khớp hồ sơ nào cả — nó lưu được, nó chỉ không cấp gì. Chủ thể Reporting Export thì ngược lại: nó không được phép sở hữu hồ sơ, và đó chính là lý do nó là lựa chọn sai cho công việc này và là lựa chọn đúng cho một tác vụ xuất báo cáo chỉ đọc.
Ngày nào đó có người gỡ lượt cấp quyền của Invoice Import khỏi Hồ sơ vụ việc. Lượt chạy kế tiếp dừng lại và chờ, mang chip Bị chặn do phân quyền, với lý do "không có quyền nào cho phép thao tác này với chủ thể trên thực thể" — nêu tên thao tác và thực thể, không bao giờ nêu hồ sơ. Nó không thất bại, không vào hàng đợi lỗi, và nhấn Tiếp tục khi quyền chưa được cấp lại sẽ bị từ chối. Chỉ có cấp lại quyền mới gỡ được nó; đổi chính sách Chạy với tư cách thì không.