Phân quyền RLS – trong Power BI

Trong Power BI, các hàm PATH, PATHITEM, và PATHCONTAINS thường được sử dụng để thiết lập Row-Level Security (RLS) cho các cấu trúc dữ liệu dạng phân cấp (hierarchical data). Các hàm này giúp kiểm soát và cấp quyền truy cập dữ liệu theo cấp bậc, chẳng hạn như trong tổ chức có nhiều cấp quản lý (giám đốc, trưởng phòng, nhân viên) hoặc phân cấp sản phẩm (nhóm sản phẩm, loại sản phẩm, sản phẩm).

1. Hàm PATH

  • Mục đích: PATH tạo ra một chuỗi đại diện cho đường dẫn phân cấp từ một cấp thấp nhất lên cấp cao nhất.
  • Cú pháp: PATH(<child_column>, <parent_column>)
    • child_column: Cột chứa giá trị của cấp hiện tại.
    • parent_column: Cột chứa giá trị của cấp trên.
  • Ứng dụng: PATH được dùng để tạo ra một chuỗi đại diện cho mối quan hệ phân cấp, giúp xác định mối quan hệ từ cấp dưới đến cấp trên trong một tổ chức hoặc hệ thống phân cấp.

Ví dụ

Giả sử bạn có bảng Employee với hai cột EmployeeID (mã nhân viên) và ManagerID (mã quản lý của nhân viên đó). Bạn có thể dùng PATH để xác định chuỗi phân cấp từ một nhân viên đến cấp quản lý cao nhất.

DAX: EmployeePath = PATH(Employee[EmployeeID], Employee[ManagerID])

Kết quả là cột EmployeePath sẽ chứa chuỗi đại diện cho đường dẫn phân cấp từ nhân viên đến các cấp quản lý.

2. Hàm PATHITEM

  • Mục đích: PATHITEM truy xuất một phần tử cụ thể từ đường dẫn phân cấp được tạo bởi PATH.
  • Cú pháp: PATHITEM(<path>, <position>, <datatype>)
    • path: Chuỗi phân cấp được tạo bởi PATH.
    • position: Vị trí của phần tử cần lấy trong đường dẫn.
    • datatype: (Tuỳ chọn) Kiểu dữ liệu của kết quả (INTEGER hoặc TEXT).
  • Ứng dụng: PATHITEM giúp trích xuất các cấp cụ thể trong một chuỗi phân cấp. Hàm này hữu ích khi bạn cần xác định các cấp bậc cụ thể để phân quyền truy cập.

Ví dụ

Tiếp tục với ví dụ bảng Employee, bạn có thể dùng PATHITEM để lấy cấp quản lý đầu tiên của mỗi nhân viên:

DAX FirstManager = PATHITEM(Employee[EmployeePath], 1, INTEGER)

Kết quả sẽ trả về EmployeeID của cấp quản lý đầu tiên (cấp cao nhất) trong chuỗi phân cấp của mỗi nhân viên.

3. Hàm PATHCONTAINS

  • Mục đích: PATHCONTAINS kiểm tra xem một giá trị cụ thể có tồn tại trong chuỗi phân cấp hay không.
  • Cú pháp: PATHCONTAINS(<path>, <item>)
    • path: Chuỗi phân cấp được tạo bởi PATH.
    • item: Giá trị cần kiểm tra.
  • Ứng dụng: PATHCONTAINS rất hữu ích khi thiết lập bảo mật cấp dòng (RLS) để kiểm tra quyền truy cập. Hàm này giúp xác định xem người dùng hiện tại có thuộc nhánh phân cấp cần truy cập hay không.

Ví dụ

Nếu bạn muốn kiểm tra xem một nhân viên có nằm dưới sự quản lý của một cấp quản lý cụ thể (ví dụ, ManagerID101) hay không, bạn có thể dùng PATHCONTAINS:

DAX IsUnderManager101 = PATHCONTAINS(Employee[EmployeePath], "101")

Kết quả sẽ trả về TRUE nếu EmployeePath chứa mã 101, nghĩa là nhân viên này nằm dưới quản lý của người có mã 101.

Ứng dụng của các hàm này trong bảo mật (Row-Level Security)

Các hàm PATH, PATHITEM, và PATHCONTAINS giúp thiết lập bảo mật cấp dòng dựa trên mối quan hệ phân cấp:

  • Thiết lập RLS dựa trên phân cấp: Bạn có thể thiết lập các quy tắc bảo mật để cấp quyền truy cập dựa trên đường dẫn phân cấp. Ví dụ, nếu một người dùng là quản lý của một nhóm, bạn có thể sử dụng các hàm này để cho phép họ xem dữ liệu của tất cả nhân viên nằm trong nhánh của họ.
  • Ví dụ RLS với PATHCONTAINS: Giả sử bạn muốn cấp quyền truy cập cho người dùng dựa trên EmployeeID, và muốn họ có thể xem dữ liệu của tất cả nhân viên trong nhánh của họ. Bạn có thể tạo một quy tắc RLS trong Power BI như sau:DAX: PATHCONTAINS(Employee[EmployeePath], USERPRINCIPALNAME())

Trong ví dụ trên, hàm USERPRINCIPALNAME() lấy địa chỉ email của người dùng hiện tại, và PATHCONTAINS kiểm tra xem người dùng có nằm trong chuỗi phân cấp cần truy cập hay không. Điều này đảm bảo người dùng chỉ có thể xem dữ liệu của các nhân viên nằm trong nhánh của họ, đáp ứng yêu cầu bảo mật cấp dòng (RLS).

Với các hàm này, bạn có thể quản lý quyền truy cập dữ liệu theo cấu trúc phân cấp phức tạp, giúp bảo mật dữ liệu một cách hiệu quả và dễ dàng quản lý hơn trong Power BI.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *