Cách được đề xuất để truy xuất danh sách tất cả Tài nguyên mà Người dùng có quyền truy cập là gì? Trong nhiều ví dụ tôi đã thấy, Ủy quyền được đặt vào một dịch vụ riêng biệt - thường là một phương pháp cho thấy một phương thức tương tự như isAuthorized(), có thể được sử dụng cho các truy vấn riêng lẻ ("Người dùng có được phép sử dụng Tài nguyên ABC hay không?" ? ") cũng như truy vấn hàng loạt (" Người dùng có được phép sử dụng bất kỳ danh sách tài nguyên nào sau đây không? ").Dịch vụ ủy quyền - trả lại danh sách tài nguyên được ủy quyền
Trong khi phép logic tồn tại trong dịch vụ ủy quyền, các thi các chính sách cấp phép được giữ bên trong ứng dụng riêng của mình (ví dụ, lớp kinh doanh logic cho thực sự thực hiện quyền truy cập vào tài nguyên, dựa trên kết quả từ dịch vụ Ủy quyền hoặc lớp trình bày để hiển thị/ẩn các tùy chọn riêng lẻ dựa trên kết quả từ Dịch vụ cấp phép, v.v.).
Cách ưa thích để làm điều này nếu, ví dụ, lớp Truy cập dữ liệu của tôi có tiềm năng hàng tỷ "tài nguyên" mà nó có thể trả lại? Lớp logic nghiệp vụ của tôi có truy vấn tất cả dữ liệu đó (chuyển tất cả dữ liệu đó qua mạng) và sau đó chuyển tiếp danh sách khổng lồ đó tới Dịch vụ cấp phép (một lần nữa qua mạng), chỉ để có danh sách khổng lồ "ALLOW/DENY" được gửi trở lại logic kinh doanh? Rõ ràng điều đó không có vẻ đúng.
Đây có phải là trường hợp chúng tôi không thể tách "truy cập dữ liệu", ủy quyền logic và logic nghiệp vụ không? Thay vào đó, tôi có thể yêu cầu lớp Truy cập dữ liệu của mình chỉ trả lại cho tôi danh sách tất cả các Tài nguyên mà Người dùng có quyền truy cập, có thể được thực hiện dưới dạng tham gia cơ sở dữ liệu đơn giản hay không. có quyền truy cập vào tài nguyên nào dưới các điều kiện (tức là chính sách ủy quyền) được nhúng trong mã truy cập dữ liệu và do đó, các chính sách đó sẽ được trải qua cơ sở mã của tôi (ví dụ: một số logic ủy quyền sẽ có trong Truy cập dữ liệu của tôi Lớp, một số sẽ nằm trong Lớp ủy quyền của tôi, v.v.)?
Có thể hiệu suất vượt trội so với kiến trúc "sạch", nhưng có cách nào tốt hơn để thực hiện việc này không?
Tôi đang đối mặt với một câu hỏi hóc búa tương tự với ứng dụng cũ lớn mà tôi đang làm việc. Kịch bản "tập hợp kết quả lớn" là khó khăn, và tôi chắc chắn không nghĩ rằng đó là một vấn đề không giống như sJhonny ngụ ý. Trong khi tập hợp kết quả của tất cả ** bản ghi ** có thể không phải là thiết kế tốt, bạn vẫn gặp sự cố nếu bạn muốn cung cấp số lượng bản ghi hoặc số trang (và thiết kế tốt * sẽ *). Điều này càng trở nên khó khăn hơn nếu lớp dữ liệu của bạn được xây dựng trên một công nghệ khác, ví dụ, các thủ tục lưu sẵn SQL. Ngay cả khi bạn thừa nhận sao chép logic ủy quyền của mình, nó vẫn ở một ngôn ngữ khác! – Snixtor