Tài liệu này được dịch bởi AI. Đối với bất kỳ thông tin không chính xác nào, vui lòng tham khảo phiên bản tiếng Anh
ACL (Access Control List) được sử dụng để kiểm soát quyền thao tác tài nguyên. Bạn có thể cấp quyền cho các vai trò, hoặc bỏ qua các ràng buộc vai trò để trực tiếp giới hạn quyền. Hệ thống ACL cung cấp một cơ chế quản lý quyền linh hoạt, hỗ trợ các đoạn quyền (snippet), middleware, đánh giá điều kiện và nhiều phương pháp khác.
Các đối tượng ACL thuộc về nguồn dữ liệu (dataSource.acl). ACL của nguồn dữ liệu chính có thể được truy cập nhanh chóng qua app.acl. Để biết cách sử dụng ACL của các nguồn dữ liệu khác, vui lòng xem chương Quản lý nguồn dữ liệu.
Đoạn quyền (Snippet) cho phép bạn đăng ký các tổ hợp quyền thường dùng thành các đơn vị quyền có thể tái sử dụng. Sau khi một vai trò được liên kết với một đoạn quyền, nó sẽ có được tập hợp các quyền tương ứng, giúp giảm cấu hình lặp lại và nâng cao hiệu quả quản lý quyền.
acl.allow() được sử dụng để cho phép một số thao tác bỏ qua ràng buộc vai trò. Điều này phù hợp với các API công khai, các tình huống yêu cầu đánh giá quyền động, hoặc các trường hợp cần đánh giá quyền dựa trên ngữ cảnh yêu cầu.
Mô tả tham số condition:
'public':Bất kỳ người dùng nào (bao gồm cả người dùng chưa đăng nhập) đều có thể truy cập, không cần bất kỳ xác thực nào.'loggedIn':Chỉ người dùng đã đăng nhập mới có thể truy cập, yêu cầu danh tính người dùng hợp lệ.(ctx) => Promise<boolean> hoặc (ctx) => boolean:Hàm tùy chỉnh, động xác định xem có cho phép truy cập hay không dựa trên ngữ cảnh yêu cầu, có thể triển khai logic quyền phức tạp.acl.use() được sử dụng để đăng ký middleware quyền tùy chỉnh, cho phép chèn logic tùy chỉnh vào luồng kiểm tra quyền. Thường được sử dụng kết hợp với ctx.permission để định nghĩa các quy tắc quyền tùy chỉnh. Điều này phù hợp với các tình huống yêu cầu kiểm soát quyền phi truyền thống, chẳng hạn như biểu mẫu công khai cần xác minh mật khẩu tùy chỉnh, kiểm tra quyền động dựa trên tham số yêu cầu, v.v.
Các tình huống ứng dụng điển hình:
Kiểm soát quyền thông qua ctx.permission:
Mô tả thuộc tính ctx.permission:
skip: true:Bỏ qua các kiểm tra quyền ACL tiếp theo, trực tiếp cho phép truy cập.addFixedParams có thể thêm các ràng buộc phạm vi dữ liệu (filter) cố định cho các thao tác của một số tài nguyên. Các ràng buộc này sẽ bỏ qua hạn chế vai trò và được áp dụng trực tiếp, thường được sử dụng để bảo vệ dữ liệu hệ thống quan trọng.
Mẹo:
addFixedParamscó thể được sử dụng để ngăn dữ liệu nhạy cảm bị xóa hoặc sửa đổi do nhầm lẫn, chẳng hạn như các vai trò hệ thống tích hợp sẵn, tài khoản quản trị viên, v.v. Các ràng buộc này sẽ có hiệu lực kết hợp với quyền vai trò, đảm bảo rằng ngay cả khi có quyền, dữ liệu được bảo vệ cũng không thể bị thao tác.
acl.can() được sử dụng để kiểm tra xem một vai trò có quyền thực hiện thao tác được chỉ định hay không, trả về đối tượng kết quả quyền hoặc null. Thường được sử dụng trong logic nghiệp vụ để động kiểm tra quyền, ví dụ như trong middleware hoặc trình xử lý thao tác để quyết định xem có cho phép thực hiện một số thao tác hay không dựa trên vai trò.
Mẹo: Nếu truyền nhiều vai trò, hệ thống sẽ kiểm tra từng vai trò tuần tự và trả về kết quả của vai trò đầu tiên có quyền.
Định nghĩa kiểu:
Nếu bạn muốn các thao tác tùy chỉnh có thể được cấu hình trên giao diện (ví dụ: hiển thị trong trang quản lý vai trò), bạn cần sử dụng setAvailableAction để đăng ký chúng. Các thao tác đã đăng ký sẽ xuất hiện trong giao diện cấu hình quyền, nơi quản trị viên có thể cấu hình quyền thao tác cho các vai trò khác nhau.
Mô tả tham số:
{{t("key")}}).'new-data':Các thao tác tạo dữ liệu mới (ví dụ: nhập, thêm mới, v.v.).'existing-data':Các thao tác sửa đổi dữ liệu hiện có (ví dụ: cập nhật, xóa, v.v.).'new-data'.Sau khi đăng ký, thao tác này sẽ xuất hiện trong giao diện cấu hình quyền, nơi quản trị viên có thể cấu hình quyền của thao tác này trong trang quản lý vai trò.