2011-11-18 34 views
9

Tôi đã làm việc với Symfony (2.x) lần đầu tiên và tôi có một số câu hỏi về định nghĩa vai trò, phân cấp vai trò và cách chúng có thể được gán cho người dùng cá nhân.Symfony2: Lưu trữ người dùng, vai trò, phân cấp vai trò và điều khiển truy cập trong cơ sở dữ liệu

Tôi quan tâm đến việc lưu trữ vai trò và phân cấp vai trò trong cơ sở dữ liệu (chứ không phải security.yml); tuy nhiên, tôi không thể tìm thấy bất kỳ tài liệu nào hỗ trợ điều này. Điều này có được khuyến khích không?

Tôi muốn có mô-đun quản trị có thể thêm vai trò mới và xác định phân cấp vai trò; Tuy nhiên, có mô-đun quản trị sửa đổi security.yml hoặc một số tập tin cấu hình khác có vẻ như một ý tưởng tồi.

Điều này rõ ràng sẽ yêu cầu các ACL có thể được lưu trữ trong cơ sở dữ liệu.

  • Có ai có bất kỳ mẹo hoặc tài liệu nào có thể trợ giúp việc này không?
  • Ý tưởng tồi, hiệu suất có sáng suốt không?

Tôi đã thực hiện thành công việc này với Zend Framework trong quá khứ và hy vọng sẽ làm tương tự với Symfony2.

+0

Tôi thấy có các gói có sẵn cùng nhau có thể thực hiện công việc này. FOSUserBundle, SonataAdminBundle, SonataUserBundle (hoạt động trên đầu trang của FOSUserBundle). Tôi cũng bắt đầu phát triển tương tự trong symfony lần đầu tiên. Hãy chia sẻ kinh nghiệm của bạn. – vishal

Trả lời

1

Bạn sẽ cần phải đặt vai trò trong db, và bản đồ nó sử dụng một mối quan hệ nhiều-nhiều. Sau đó, xây dựng một số quản trị viên trên các vai trò. Tôi đã viết cách thay đổi Người dùng để sử dụng vai trò m2m tại http://blog.jmoz.co.uk/symfony2-fosuserbundle-role-entities. Tôi đã không có như xa như hệ thống phân cấp vai trò như vậy mà vẫn còn được lưu trữ trong cấu hình.

4

Giải pháp:

Mục sách dạy nấu ăn sau đây là về lưu trữ/lấy user và role đến/từ cơ sở dữ liệu "Làm thế nào để tải Người dùng An ninh từ cơ sở dữ liệu (các nhà cung cấp Entity)" http://symfony.com/doc/current/cookbook/security/entity_provider.html

để làm cho câu chuyện dài ngắn, roleuser lớp thực thể của bạn phải thực hiện RoleInterfaceUserInterface/AdvancedUserInterface và bạn phải thực hiện một số thay đổi để security.yml bạn

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