2015-08-04 28 views
9

Trong Azure Tìm kiếm, chúng tôi có thể tạo nhiều chỉ mục cho các kết quả tìm kiếm khác nhau và chúng tôi có hai loại khóa api. Một là dành cho quản trị và một là để truy vấn. Nhưng với cùng một người dùng api-key có thể tìm kiếm tất cả các chỉ mục.Có thể triển khai bảo mật dựa trên người dùng trên Tìm kiếm Azure không?

Trong giải pháp của mình, tôi cần phải thiết kế một hệ thống để những người dùng khác nhau sử dụng hệ thống sẽ nhận được kết quả khác nhau bằng những ưu tiên của họ. Tôi nghĩ rằng điều này có thể được giải quyết với các chỉ mục chuyên dụng cho từng vai trò nhưng người dùng vẫn có thể truy vấn các chỉ mục khác nếu họ muốn.

Làm cách nào để đảm bảo rằng mọi người dùng CHỈ có thể tìm kiếm trên một chỉ mục cụ thể.

Trả lời

7

Không thể hạn chế việc sử dụng khóa cho một chỉ mục cụ thể. Bạn sẽ cần phải làm một cái gì đó của riêng bạn.

Khả năng khác sẽ là tạo các tài khoản dịch vụ tìm kiếm khác nhau và sau đó tạo chỉ mục trong tài khoản thay vì có một tài khoản. Sau đó, bạn có thể cấp quyền truy cập cho người dùng của mình cho tài khoản dịch vụ tìm kiếm thích hợp.

CẬP NHẬT

Dựa trên ý kiến ​​của bạn, bạn đang thực sự tìm cách để hạn chế kết quả tìm kiếm (tài liệu) bởi vai trò của người dùng ví dụ: đi một mức độ sâu hơn so với chỉ số. Để đạt được điều này, những gì bạn có thể làm là tự động thêm tiêu chí vai trò này vào truy vấn tìm kiếm của mình là OData Filter. Ví dụ: giả sử chỉ mục của bạn có các trường boolean cho từng loại vai trò (Quản trị viên, Người dùng, v.v.) và người dùng tìm kiếm một số từ khóa. Sau đó, những gì bạn có thể làm là tạo một OData Filter $filter nơi bạn kiểm tra các điều kiện này. Vì vậy, URL tìm kiếm của bạn sẽ trông giống như sau:

https://<search-service-name>.search.windows.net/indexes/<index-name>/docs?search=<search-string>&$filter=Administrator%20eq%20true 

Bằng cách đó, Dịch vụ tìm kiếm đang thực hiện tất cả việc lọc và bạn không phải thực hiện bất kỳ điều gì trong mã của mình.

Bạn có thể tìm hiểu thêm về các tùy chọn truy vấn tại đây: https://msdn.microsoft.com/en-us/library/azure/dn798927.aspx.

+2

Tôi nghĩ rằng việc tạo một dịch vụ web sẽ hoạt động giữa máy khách và Tìm kiếm Azure. Nó sẽ lấy từ tìm kiếm từ khách hàng và gửi đến Azure Search bằng cách thêm api-key vào nó. Sau khi nhận được kết quả, nó sẽ lọc kết quả theo vai trò của máy khách và trả về kết quả cuối cùng. Bằng cách này api-key sẽ được ẩn từ các khách hàng để không ai có thể tìm kiếm trực tiếp từ dịch vụ Azure Search. Nó trông thế nào ? –

+0

Điều đó sẽ hiệu quả vì ứng dụng của bạn đang hạn chế quyền truy cập bằng cách chỉ hiển thị chỉ mục (hoặc chỉ mục) mà người dùng có quyền truy cập. –

+0

Acutally sẽ chỉ có một chỉ mục. Chỉ mục sẽ bao gồm một trường có tên Vai trò sẽ bao gồm những vai trò nào sẽ có quyền truy cập vào tài liệu cụ thể. Dịch vụ web của tôi sẽ lọc các tài liệu theo trường vai trò. –

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