> For AI agents: the complete documentation index is available at https://nhanbe.id.vn/llms.txt, the full documentation bundle is available at https://nhanbe.id.vn/llms-full.txt.

# User Administration and Security

## Users and Groups

- **User**: tài khoản đăng nhập AEM, giữ thông tin cơ bản và các privilege được gán.
- **Group**: tập hợp user hoặc group khác. Thay đổi trên group áp dụng cho toàn bộ member — dùng group để quản lý permission thay vì gán thẳng cho từng user.

### Built-in Users and Groups

AEM cài sẵn một số user/group mặc định. **Đổi tất cả default password ngay sau cài đặt.**

| User/Group            | Type  | Mô tả                                                                                                | Khuyến nghị                                      |
| --------------------- | ----- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| `admin` (pw: admin)   | User  | Toàn quyền hệ thống, dùng cho kết nối WCM-CRX. Không thể xóa, sẽ được tạo lại khi restart.           | Đổi password ngay sau cài đặt                    |
| `anonymous`           | User  | Quyền tối thiểu cho truy cập không xác thực. Không thể xóa vĩnh viễn, chỉ có thể disable.            | Không nên disable/xóa, ảnh hưởng author instance |
| `author` (pw: author) | User  | Ghi vào `/content`, có quyền contributor + surfer. Đây là Geometrixx demo user, không phải built-in. | Xóa hoặc đổi password                            |
| `administrators`      | Group | Toàn quyền. Chỉ `admin` mới sửa được group này. Bỏ qua cả `deny-everyone` trên node.                 | —                                                |
| `content-authors`     | Group | Chỉnh sửa nội dung: read, modify, create, delete.                                                    | Tạo group riêng theo project nếu cần             |
| `contributor`         | Group | Quyền cơ bản để viết content. Không có quyền truy cập cây `/content`, phải gán riêng.                | —                                                |
| `dam-users`           | Group | Quyền upload/share asset và collection trong AEM Assets.                                             | —                                                |
| `everyone`            | Group | Mọi user đều thuộc group này. Dùng để gán quyền mặc định cho tất cả.                                 | Không sửa hoặc xóa                               |
| `tag-administrators`  | Group | Được phép chỉnh sửa tags.                                                                            | —                                                |
| `user-administrators` | Group | Quyền tạo/quản lý user và group.                                                                     | —                                                |
| `workflow-editors`    | Group | Tạo và chỉnh sửa workflow model.                                                                     | —                                                |
| `workflow-users`      | Group | Bắt buộc cho user tham gia workflow. Có quyền truy cập `/etc/workflow/instances`.                    | Thêm user thủ công vào group này                 |

## Permissions trong AEM

AEM dùng ACL (Access Control List) để xác định user/group được phép làm gì và ở path nào.

### Các Action trên resource

| Action    | Mô tả                                                                                                                                   |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Read      | Đọc trang và các trang con                                                                                                              |
| Modify    | Sửa nội dung, tạo paragraph. Ở JCR level: edit properties, lock, version, write trên node có `jcr:content` (cq:Page, nt:file, cq:Asset) |
| Create    | Tạo trang hoặc trang con. Nếu Modify bị deny thì subtree bên dưới `jcr:content` bị loại trừ                                             |
| Delete    | Xóa paragraph hoặc trang. Tương tự Create — nếu Modify bị deny thì subtree `jcr:content` bị loại trừ                                    |
| Read ACL  | Đọc access control list của trang                                                                                                       |
| Edit ACL  | Sửa access control list của trang                                                                                                       |
| Replicate | Replicate content sang môi trường khác (ví dụ Publish). Áp dụng cho cả trang con                                                        |

:::note
AEM tự tạo user group cho role-assignment (Owner, Editor, Viewer) trong Collections. Không nên thêm ACL thủ công cho các group này vì có thể tạo ra lỗ hổng bảo mật.
:::

### Cách ACL được đánh giá

ACL được xây dựng theo cây phân cấp trang, quét từ dưới lên (bottom-up) cho đến khi tìm thấy permission phù hợp đầu tiên.

Để xem ACL mẫu, mở **CRXDE** > tab **Access Control** tại:

- `/etc/cloudservices`
- `/home/users/we-retail`

### Permission States

| Trạng thái               | Ý nghĩa                                               |
| ------------------------ | ----------------------------------------------------- |
| Allow (checkbox checked) | Cho phép thực hiện action trên trang này và trang con |
| Deny (không checkbox)    | Từ chối thực hiện action trên trang này và trang con  |

Nếu không có permission nào được định nghĩa cho một trang, tất cả actions đều bị deny.

Ký hiệu trên checkbox khi permission không kế thừa từ node cha:

- `*` (asterisk): có ít nhất một local entry (effective hoặc ineffective) — wildcard ACL định nghĩa trong CRX.
- `!` (exclamation): có ít nhất một entry hiện không có hiệu lực.

**Khuyến nghị quản lý ACL:**

- Không gán permission trực tiếp cho user, chỉ gán cho group.
- Nếu user chỉ cần sửa trang: chỉ gán Modify + Read, không gán Create/Delete.
- Ưu tiên dùng Allow, hạn chế dùng Deny. Deny từ nhiều group có thể triệt tiêu nhau và gây kết quả ngoài ý muốn.

### Xem chi tiết Permission

Trong tab **Permissions**, duyệt theo path bằng cách expand/collapse node để theo dõi kế thừa permission. Click **Details** để xem chi tiết:

- Phần trên: hiển thị lại thông tin từ tree grid — không có icon (chưa khai báo), tick (allow), dấu trừ (deny).
- Phần dưới: danh sách user/group khai báo entry cho path đó.

### Impersonate User

Tính năng Impersonate cho phép user-B thực hiện thao tác với đầy đủ quyền của user-A. Dùng khi nghỉ phép, debug, hoặc chia sẻ tải tạm thời.

:::note
User không phải admin cần có quyền READ trên `/home/users` mới dùng được tính năng này.
:::

:::warning
Khi đang impersonate, audit log ghi lại thời điểm bắt đầu/kết thúc, nhưng access log chỉ thấy tên user được impersonate (user-A), không thấy user thực sự thao tác (user-B). Ngoài ra, page bị lock khi impersonate chỉ unlock được bởi user bị impersonate hoặc admin.
:::

### Best Practices

| Nguyên tắc                              | Lý do                                                            |
| --------------------------------------- | ---------------------------------------------------------------- |
| Dùng Group thay vì User                 | Group ít hơn user, dễ bảo trì, kế thừa đơn giản hơn              |
| Ưu tiên Allow, tránh Deny               | Deny từ nhiều group có thể triệt tiêu nhau, gây kết quả khó đoán |
| Cấu trúc rõ ràng ngay từ đầu            | Dễ bảo trì và bàn giao sau này                                   |
| Test trên môi trường riêng              | Kiểm tra quan hệ user/group trước khi áp dụng production         |
| Đổi Default User/Group ngay sau cài đặt | Tránh lỗ hổng bảo mật từ tài khoản mặc định                      |

## Quản lý Users và Groups

Truy cập Security Console tại `https://<server>:<port>/useradmin` (đăng nhập bằng admin).

Các tab trong Security Console:

| Tab                      | Chức năng                                                      |
| ------------------------ | -------------------------------------------------------------- |
| Filter box               | Lọc danh sách user/group theo từ khóa                          |
| Hide Users / Hide Groups | Toggle ẩn user hoặc group khỏi danh sách                       |
| Edit                     | Tạo, xóa, activate/deactivate user hoặc group                  |
| Properties               | Xem/sửa thông tin user/group, đổi password                     |
| Groups                   | Danh sách group mà account đang thuộc về, thêm/xóa khỏi group  |
| Members                  | Chỉ dùng cho group — liệt kê member của group đó               |
| Permissions              | Gán quyền theo path: read/write/delete, hierarchy, replication |
| Impersonators            | Cấu hình user nào được phép impersonate account này            |
| Preferences              | Cài đặt ngôn ngữ, toolbar cho user/group                       |

### Lọc và ẩn Users/Groups

- **Filter**: nhập từ khóa vào ô lọc rồi click kính lúp. Click **x** để xóa filter.
- **Hide Users / Hide Groups**: toggle để ẩn user hoặc group (không thể ẩn cả hai cùng lúc). Click lại để hiện.

### Tạo User và Group

1. Click **Edit** > **Create User** hoặc **Create Group**.
2. Nhập thông tin:
   - **User**: Login ID, tên, email, password. AEM tự tạo path dựa trên chữ cái đầu của last name.
   - **Group**: Group ID và mô tả (tùy chọn).
3. Click **Create**.

### Xóa User và Group

1. Chọn user/group (Shift+click hoặc Ctrl+click để chọn nhiều).
2. Click **Edit** > **Delete** > **OK**.

### Sửa Properties

Double-click user/group > tab **Properties** > sửa > **Save**.

:::note
Path của user hiển thị ở cuối Properties và không thể sửa.
:::

### Đổi Password

:::note
Không dùng Security Console để đổi password của tài khoản `admin`. Dùng Granite Operations > Users Console. Với AEM Forms on JEE, dùng Admin Console (`/adminui`).
:::

1. Double-click user > tab **Properties** > click **Set Password**.
2. Nhập password mới hai lần > click **Set**.

### Thêm User/Group vào Group

Có 3 cách:

**Qua tab Groups (từ phía user/group con):**

1. Double-click account cần gán > tab **Groups**.
2. Kéo tên group từ tree sang pane **Groups** > **Save**.

**Qua tab Members (từ phía group cha):**

1. Double-click group cần thêm member > tab **Members**.
2. Kéo tên member từ tree sang pane **Members** > **Save**.

**Qua tab Permissions:**

1. Double-click user/group > tab **Permissions** > điều hướng đến path > click **Details**.
2. Tick checkbox cột **Member** cho member cần gán quyền > **OK**.

### Xóa User/Group khỏi Group

**Qua tab Groups:** Double-click account > tab **Groups** > chọn group > click **Remove** > **Save**.

**Qua tab Members:** Double-click group > tab **Members** > chọn member > click **Remove** > **Save**.

**Qua tab Permissions:** Double-click user/group > tab **Permissions** > điều hướng đến path > click **Details** > bỏ tick checkbox cột **Member** > **OK**.

### User Synchronization

Khi deploy theo mô hình publish farm (TarMK), user và group phải được đồng bộ giữa các publish node. Xem thêm: [User Synchronization](https://experienceleague.adobe.com/docs/experience-manager-65/administering/security/sync.html).

## Quản lý Permissions

:::note
AEM cung cấp Touch UI Principal View để quản lý permission. Xem: [Principal View for Permissions Management](https://experienceleague.adobe.com/docs/experience-manager-65/administering/security/touch-ui-principal-view.html).
:::

### Gán Permissions

1. Double-click user/group trong Security Console.
2. Tab **Permissions** > tick/bỏ tick checkbox tương ứng với action và path.
3. Click **Save**.

### Gán Replication Privilege

Replication privilege là quyền publish content. Thứ tự ưu tiên: user > group, Allow > Deny.

1. Double-click user/group > tab **Permissions**.
2. Điều hướng đến path cần cấu hình.
3. Tick/bỏ tick cột **Replicate** > **Save**.

### Tìm kiếm Node

- **Path search**: chuỗi bắt đầu bằng `/` — tìm subnode trực tiếp của path đó.
  - Mũi tên phải: chọn subnode trong kết quả.
  - Mũi tên xuống: tìm lại.
  - Enter: chọn subnode và load vào tree grid.
- **Fulltext search**: chuỗi không bắt đầu bằng `/` — tìm toàn văn trong tất cả node bên dưới `/content`.

### Cấu hình Impersonators

Cho phép user khác impersonate tài khoản hiện tại:

1. Double-click user cần được impersonate > tab **Impersonators**.
2. Kéo user (người sẽ impersonate) từ tree vào pane Impersonate.
3. Click **Save**.

### Cài đặt Preferences

Chọn user/group (Ctrl+click hoặc Shift+click cho nhiều) > tab **Preferences** > sửa cài đặt ngôn ngữ, toolbar > **Save**.

### Cấp quyền quản lý User cho User khác

1. Thêm user vào group `administrators` > **Save**.
2. Trong tab **Permissions** của user đó, điều hướng đến `/` > tick cột **Replicate** > **Save**.

User này có thể activate, deactivate, xóa và tạo user mới.

### Mở rộng Privilege ở Project Level

Privilege phân cấp (hierarchy-modification) được tổ hợp từ các jcr-privilege. Replication privilege có tên `crx:replicate`, lưu trữ và đánh giá cùng các privilege khác trong JCR repository nhưng không được enforce ở JCR level.

Định nghĩa và đăng ký custom privilege là một phần của [Jackrabbit API](https://jackrabbit.apache.org/oak/docs/security/privilege.html) từ phiên bản 2.4 (xem [JCR-2887](https://issues.apache.org/jira/browse/JCR-2887)). Cơ chế đăng ký privilege hiển thị trong UI tại **Repository Configuration**.

Việc đăng ký privilege mới được bảo vệ bởi một built-in privilege ở repository level. Mặc định, `admin` và các member của `administrators` có quyền này.

:::note
Tuy implementation đảm bảo validate và evaluate custom privilege, nhưng không thể enforce chúng trừ khi chúng là tổ hợp của built-in privileges.
:::
