Effector
Effect đại diện cho kết quả của một quy tắc chính sách, và Effector là giao diện để xử lý các hiệu ứng trong Casbin.
MergeEffects()
Hàm MergeEffects() được sử dụng để kết hợp tất cả các kết quả khớp được thu thập bởi enforcer thành một quyết định duy nhất.
Ví dụ:
- Go
Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)
Trong ví dụ này:
Effectlà quyết định cuối cùng được kết hợp bởi hàm này (khởi tạo làIndeterminate).explainIndexlà chỉ số củaeft(AllowhoặcDeny), và nó được khởi tạo là-1.errđược sử dụng để kiểm tra xem hiệu ứng có được hỗ trợ hay không.exprlà biểu diễn chuỗi của các hiệu ứng chính sách.effectslà một mảng các hiệu ứng, có thể làAllow,Indeterminate, hoặcDeny.matcheslà một mảng cho biết kết quả có khớp với chính sách hay không.policyIndexlà chỉ số của chính sách trong mô hình.policyLengthlà độ dài của chính sách.
Đoạn mã trên minh họa cách truyền tham số cho hàm MergeEffects(), và hàm này sẽ xử lý các hiệu ứng và kết quả dựa trên expr.
Để sử dụng Effector, hãy làm theo các bước sau:
- Go
var e Effector
Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)
Ý tưởng cơ bản của MergeEffects() là nếu expr có thể khớp với kết quả, chỉ ra rằng p_eft là allow, thì tất cả các hiệu ứng có thể được hợp nhất. Nếu không có quy tắc từ chối nào được khớp, thì quyết định là cho phép.
Nếu expr không khớp với điều kiện "priority(p_eft) || deny", và policyIndex ngắn hơn policyLength-1, nó sẽ short-circuit một số hiệu ứng ở giữa.