2014-09-23 15 views
10

Tìm cách sử dụng HapiJS làm máy chủ API của chúng tôi. Chúng tôi cần quyền người dùng chi tiết, ví dụ: "Người dùng A có thể chỉnh sửa trường B" "Người dùng C có thể xem trường D" cho một mô hình/tài nguyên đã cho.Có thư viện nào tương thích với Hapi để có quyền truy cập ACL/Người dùng chi tiết không?

Trước khi chúng tôi bắt đầu xây dựng thứ gì đó mà tôi đang tìm kiếm để xem một cái gì đó như thế này đã được thực hiện tương thích với Hapi chưa.

+0

Bạn có tìm thấy gì không? – srlm

+0

Không, dự án đó đang được giữ trong thời điểm này. Sẽ đăng lại ở đây trên bất kỳ phát hiện nào. – Adamski

Trả lời

3

Gần đây tôi đã làm việc trên một dự án ACL cho hapijs. Nó sẽ giúp bạn có một khởi đầu tốt. https://www.npmjs.org/package/hapi-authorization

+0

Chỉ cần kiểm tra plugin và tôi có câu hỏi - bạn có thể triển khai nó theo cách mà người dùng có thể có nhiều vai trò, không phân cấp, nhưng trên cùng một cấp, cho phép truy cập vào các phần khác nhau của ứng dụng (giả sử, manage_users và manage_products)? Bạn có thể có một convetion rằng nếu đối tượng người dùng có thuộc tính .role, đó là một vai trò duy nhất; nếu nó có .roles, sau đó bạn mong đợi một mảng và kiểm tra chống lại rằng – zappan

+0

Chức năng này đã tồn tại và là mặc định. https://github.com/toymachiner62/hapi-authorization#plugin-config. Nếu bạn có câu hỏi, vui lòng gửi các vấn đề github thay vì đăng trên SO. – Catfish

4

Tôi vừa đọc một bài viết trong đó quyền ACL được xác thực bằng cách sử dụng phạm vi tích hợp.

Dưới đây là liên kết đến bài viết đề cập: https://blog.andyet.com/2015/06/16/harnessing-hapi-scopes/

Và để tiếp tục một cách nhanh chóng (sử dụng ví dụ từ liên kết ở trên), bạn sẽ có được một đối tượng người dùng mà trông giống như vậy:

{ 
    "username": "han", 
    "scope": ["door-trash-compactor"] 
} 

Phạm vi có thể được tạo ra bởi bất cứ điều gì là sao lưu ACL của bạn cho người dùng này. Trong trường hợp này bạn có tài nguyên door với id trash-compactor có thể được kiểm tra như sau:

server.route({ 
    method: 'GET', 
    route: '/doors/{door_id}', 
    config: { 
     handler: function (request, reply) { 
      reply(request.params.door_id ' door is closed'); 
     }, 
     auth: { 
      scope: ['door-{params.door_id}'] 
     } 
    } 
}); 

Phạm vi door-{params.door_id} sẽ được dịch sang door-trash-compactor mà sau đó sẽ được xác nhận. Yêu cầu của Han đến cửa máy đầm rác sẽ hợp lệ và anh ta sẽ nhận được thông báo door is closed.

Bài đăng trên blog được viết tốt (tốt hơn nhiều, sau đó tóm tắt này) và mô tả chi tiết hơn - khuyên bạn nên đọc.

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