Đeo mình vào, đây là một câu hỏi phức tạp.Cách tốt nhất để điều chỉnh hệ thống bảo mật này để xử lý nhiều thừa kế là gì?
Chúng tôi có một hệ thống giao dịch với các tập dữ liệu lớn. (triệu đến tỷ bản ghi trên mỗi bảng lớn). Tất cả các dữ liệu được xử lý trong một cấu trúc cây của các nút.
Chúng tôi đang sử dụng Symfony2 và hệ thống bảo mật Symfony2 (Đối tượng miền, Acls, Aces, v.v.). Cây Acl của chúng ta phản chiếu cây nút của chúng ta.
Ðúc một số ngôn ngữ:
DP
Defined phép, tức là một kỷ lục ace vào nút acl nàyEP
phép có hiệu lực, không có hồ sơ ace, cho phép kế thừa từ cha mẹ với mộtDP
Logic nghiệp vụ khôn ngoan, chúng tôi gán 0 hoặc 1 ace cho một đối tượng cho mỗi người dùng và dựa vào thừa kế khi không có. Root > lvl1 (DP: VIEW) > lvl2 > lvl3 (EP: VIEW)
Cho đến nay, rất tốt. Điều này tất cả các công trình.
Một số nút không chỉ có cha, nhưng được kết hợp với các nút khác (nhiều đến nhiều nút). Khi một nút được liên kết với một nút khác, điều này thể hiện một đường dẫn riêng biệt lên cây để có thể thực hiện theo. IE chúng ta sẽ có 1 hoặc nhiều đường dẫn lên cây để root để thu thập ace's.
Leaf < Parent < GrandParent < Root
Leaf < AssociatedNode < AssociatedNodeParent < AssociatedNodeGrandParent < Root
...
Hoặc logic để quản lý bỏ phiếu là tốt, những gì chúng tôi không chắc chắn là cách thể hiện nhiều đường lên cây. hiện tại của chúng tôi (đọc: xấu) ý tưởng là:
- Nhiều hành vi cha mẹ trong cây acl
- Ưu
- vẻ sạch hơn?
- Nhược điểm
- Hầu như toàn bộ viết lại của hệ thống an ninh để đặt điều này trong.
- ratsnesting tiềm năng.
- Ưu
- Nhân dạng đối tượng trùng lặp/acls đối với thực thể, chỉ định cha mẹ khác nhau.
- Ưu
- Er ...
- Nhược điểm
- sẽ tạo ra một số lượng rất lớn các bản ghi acl tiềm năng.
- Khó quản lý trong mã.
- Ưu
Tôi không có câu trả lời cho câu hỏi của bạn, nhưng nếu bạn sắp xếp nó, tôi rất muốn đọc cách bạn đã làm :-) – richsage
Điều tôi không nhận được từ câu hỏi của bạn là lý do mỗi nút không nhận được sự cho phép (ví dụ: được kế thừa từ cha mẹ?). Quan trọng hơn, tại sao bạn cần những con đường khác nhau thông qua ACL ngay từ đầu? * Trường hợp sử dụng * của bạn là gì? Hầu hết thời gian tôi nghĩ rằng câu trả lời là đơn giản một khi bạn xem các trường hợp sử dụng thay vì các giải pháp kỹ thuật cho một vấn đề. –
Bạn có thể làm rõ "* chúng tôi gán 0 hoặc 1 ace cho một đối tượng *": không có nghĩa là '0' có nghĩa là' cho phép tiêu cực rõ ràng 'hoặc' thiếu quyền tích cực 'không? – Jacco