2010-03-04 15 views
6

Tôi đang phát triển một công cụ truy vấn cơ sở dữ liệu chung, ứng dụng Biểu mẫu Windows .NET. Để làm cho lớp trình bày độc lập với lớp cơ sở dữ liệu. Tôi sử dụng một khung ORM, XPO từ DevExpress.Làm thế nào để tích hợp điều khiển truy cập với ORM của tôi trong một ứng dụng biểu mẫu cửa sổ .net?

Nhưng, tôi không có chức năng điều khiển truy cập tích hợp. Tôi lướt Internet và tìm thấy trong WCF Data Services, có một khái niệm thú vị, Interceptor, theo sau AOP (Aspect Oriented Programming).

Tôi tự hỏi ai có kinh nghiệm như vậy để xây dựng quyền kiểm soát truy cập trong ORM. Yêu cầu cơ bản của tôi là:

  1. Nó phải là phương pháp chung và được kiểm soát bởi người dùng trong thời gian chạy. Vì vậy, bất kỳ mã hóa cứng là không thể chấp nhận được.
  2. Nó có thể dựa trên thuộc tính, bảng cơ sở dữ liệu hoặc thậm chí là một hội đồng bên ngoài.

Tôi sẵn sàng mua một giải pháp đã sẵn sàng. Theo ý tưởng của AOP, một chức năng kiểm soát truy cập có thể được tích hợp với các chức năng hiện có một cách dễ dàng và gần như không có chủ ý đối với nhà phát triển trước đó;)

Mọi đề xuất đều được hoan nghênh.

+0

Bạn có quan tâm đến giải pháp như vậy được tích hợp với ORM khác không? –

+0

Tôi không quan tâm. Xin hãy tiếp tục và cho tôi biết thêm. – Ying

Trả lời

1

Tôi không chắc rằng câu trả lời này sẽ hữu ích trong trường hợp của bạn, nhưng điều đó có thể thú vị đối với bạn.

Công ty X-tensive (nhà phát triển của DataObjects.Net ORM) dự định triển khai tính năng tương tự cho DataObjects.Net sau vài tháng. Kế hoạch của X-tensive là cung cấp đầy đủ tính năng sẵn sàng để sử dụng phần mở rộng bảo mật, có thể dựa trên các thuộc tính và khía cạnh. Chắc chắn nó sẽ được kết nối chặt chẽ với ORM này, nhưng bạn có thể lấy được một số ý tưởng từ mô tả của nó. Xem yêu cầu tính năng và thảo luận của nó here.

Bạn cũng có thể xem Rhino Security, tôi không biết trạng thái hiện tại của dự án này, nhưng đường nối giải pháp đó có thể hữu ích trong trường hợp của bạn.

0

Tại sao không tạo lớp giữa ORM và lớp bản trình bày? Bằng cách thực hiện việc tách này, bạn có thể dễ dàng chuyển đổi nguồn dữ liệu (trong tương lai bạn có thể có dữ liệu của bạn trên một máy chủ khác và truy cập nó thông qua các dịch vụ web). Tôi chắc chắn rằng có một tên ưa thích cho lớp này, nhưng tôi gọi tất cả các giao diện của tôi cho các nhà quản lý.

Presentation -> Người quản lý -> Data Access Layer -> DB

Ví dụ:

var user = Program.Components.Get<IUserManager>().GetById(1); 
user.FirstName = "Jonas"; 
Program.Components.Get<IUserManager>().Save(user); 

Trong các nhà quản lý, bạn có thể sử dụng IIdentityIPrincipal (được xây dựng trong giao diện điều khiển truy cập trong. Net) để kiểm soát quyền truy cập. http://msdn.microsoft.com/en-us/library/ms172765(VS.80).aspx

Các vấn đề liên quan