2013-01-01 30 views
5

Tôi quan tâm đến việc thực hiện kiểm soát truy cập nâng cao để người dùng truy cập tài nguyên trong hệ thống phần mềm. Tôi làm việc trong lĩnh vực chăm sóc sức khỏe và một đứa trẻ trẻ tuổi thường xuyên đánh giá thấp sự phức tạp của role-based access control in healthcare. Nhưng câu hỏi này nên áp dụng cho bất kỳ ai có yêu cầu ACL phức tạp.Thư viện kiểm soát truy cập nâng cao

Trong một thời gian khá, php gacl đã là thư viện của tôi cho mục đích xử lý các vấn đề kiểm soát ACL rất phức tạp bên trong hệ thống CNTT của Y tế. Nhưng bây giờ tôi đang làm việc nhiều hơn với javascript nói chung và nút cụ thể. Tôi đã tìm kiếm npm cho các thư viện để thực hiện kiểm soát truy cập theo cách có thể khái quát.

Tôi muốn được hỗ trợ xác định hành động thay vì chỉ đơn thuần là người dùng và tài nguyên (3 tầng thay vì 2) và tôi muốn có nhóm người dùng, hành động và tài nguyên và bằng hàm ý tôi muốn có kế thừa ACL .

Các ví dụ cổ điển từ the Star Wars themed manual vào thư viện có quy tắc như:

  • Tất cả các thành viên của phi hành đoàn đã (lần, cấu hình và sử dụng) truy cập vào các khẩu súng, động cơ, buồng lái và phòng chờ, mong đợi cho chewie.
  • Tất cả các droid đều có quyền truy cập và sử dụng buồng lái, nhưng chỉ R2D2 có định cấu hình quyền truy cập vào động cơ.
  • Han có tất cả các loại quyền truy cập vào tất cả các loại tài nguyên .

Khái niệm cơ bản ở đây bao gồm khái niệm rằng bạn có thể tạo quy tắc áp dụng cho nhóm người dùng (tức là phi hành đoàn, hành khách hoặc droid) hoặc cá nhân (Han và Chewie). (truy cập, cấu hình, sử dụng) hoặc các nhóm truy cập (maintence access = configure + repair + use) với các tài nguyên khác nhau (động cơ và buồng lái) cũng có thể được nhóm lại, (battle-stations = buồng lái + súng).

Điều này cho phép cấu hình các quy tắc kiểm soát truy cập bất thường phức tạp, với quản lý dựa trên nhóm tương đối đơn giản.

Cho đến bây giờ, tôi đã thấy không có gì giống như thế này bên ngoài php-gacl. Tôi đã xem xét các dự án ACL dựa trên javascript tuyệt vời và tất cả chúng đều quảng cáo sự đơn giản và dễ sử dụng hơn là toàn diện. Điều này cũng đúng với các thư viện php ACL điển hình khác (ví dụ: Zend ACL)

Có ai đó đang làm việc trên một dự án "ACL nâng cao" cho nút không? Có cách nào tốt hơn tôi nên tìm kiếm ở đâu đó không?

php-gacl có ba phần, một là GUI quản trị dựa trên php (được thừa nhận là quá phức tạp) và API cho CRUD trên quy tắc (có thể dễ dàng chuyển đổi sang giao diện REST tôi nghĩ) và một tệp rất nhỏ cung cấp chức năng kiểm tra ACL.

Về mặt kỹ thuật, chỉ loại cuối cùng sẽ cần được chuyển hoàn toàn sang nút để mô hình phần mềm đó hoạt động?

Ở mức độ sâu hơn, tôi muốn hiểu cách tiếp cận nào đã được sử dụng thành công để xử lý vấn đề này. Vấn đề này thường được giải quyết như thế nào? Điểm thưởng cho những người có hiệu quả thảo luận về vấn đề này về nút/javascript và có lẽ ngay cả một phương pháp tiếp cận cơ sở dữ liệu cụ thể (quan hệ vs phi quan hệ). Tôi hiểu rằng có rất nhiều nền tảng lý thuyết để làm điều này đúng/sai (nghĩa là rất nhiều ý kiến ​​về RBAC, so với ACL). Những gì tôi muốn là một cái gì đó về lý thuyết vững chắc, hoặc gần như rắn mà vẫn "chỉ hoạt động" từ một quan điểm thư viện.Tôi tập trung vào Javascript, nhưng nó sẽ là tốt đẹp để hiểu làm thế nào các ngôn ngữ khác được thực tế giải quyết vấn đề này.

+0

đây là chủ đề tắt cho ngăn xếp tràn. –

Trả lời

3

Nếu bạn có thể tránh sử dụng bất kỳ loại ACL nào, bạn thường tốt hơn. Chúng phức tạp để quản lý. Bạn sẽ được tốt hơn mô hình ba cấp độ kiểm tra an ninh:

  1. URL/Địa chỉ IP/hoặc kiểm tra an ninh khác accesspoint
  2. Phương pháp khi nguồn lực kiểm tra. Bất kỳ thực thể nào bạn muốn sửa đổi hoặc thao tác bạn đều đặt quyền kiểm tra trên đó. I E. Loại quy tắc truy cập doanh nghiệp.
  3. Kiểm tra tài nguyên thực thể. Nếu mã thông báo người dùng/API/OAuth có quyền truy cập AT ALL cho một thực thể

Điều này có thể được thực hiện bằng RBAC. Vai trò của tổ chức/trang web của bạn được gán cho một nhóm quyền truy cập/sửa đổi/thao tác. Người dùng được chỉ định một vai trò, nhưng ba cấp độ kiểm tra kiểm tra PERMISSIONS, không phải vai trò.

Tôi sẽ xem xét Bảo mật mùa xuân và RBAC dưới dạng tìm kiếm trên google và mô hình trên đó. Dưới đây là một số liên kết mà tôi đã tìm thấy hữu ích:

http://www.xaprb.com/blog/2006/08/16/how-to-build-role-based-access-control-in-sql/

http://www.xaprb.com/blog/2006/08/18/role-based-access-control-in-sql-part-2/

(bởi vì tất cả các ví dụ 'nguyên thủy' và điên cuồng tên là kiểm tra ở Xuân An, bạn sẽ được thông báo để đọc bài báo cung cấp việc sử dụng tên thay thế và sử dụng cho phép xuân 'hasRole()' kiểm tra. bài viết sau đây thảo luận này trong việc thiết kế một RBAC)

http://springinpractice.com/2010/10/27/quick-tip-spring-security-role-based-authorization-and-permissions/

(Một bài thuyết trình tốt về sử dụng linh hoạt của Xuân An, bao gồm RBAC)

http://www.infoq.com/presentations/Spring-Security-3

(Sau đây đưa ra một mô tả tốt của vấn đề RBAC và giải pháp, và được thiết kế cho PHP)

http://www.tonymarston.net/php-mysql/role-based-access-control.html

một PHP framework với một thực hiện RBAC:

http://trac.symfony-project.org/wiki/UserRbac

Và cuối cùng, sơ đồ lớp cho Bảo mật mùa xuân. Bạn sẽ nhận thấy rằng nó cho phép đặt thông tin bảo mật trong bảng PARALLEL vào các thực thể đang được bảo vệ. Điều này là do thiết kế, để bảo mật mùa xuân có thể được thêm vào sau này, hoặc đưa ra, hoặc thay thế một cách dễ dàng. Nhưng nó cũng có nghĩa là nhiều bàn hơn.

http://code.google.com/p/uclm-esi-alarcos/source/browse/trunk/documentation/memoria-pfc/Figuras/Cap5/spring-security-class-diagram.png?r=295

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