2012-01-19 27 views
12

Tôi đang sử dụng phân cấp vai trò symfony2, nó hoạt động tốt, nhưng để thực hiện một số thay đổi, tôi phải truy xuất role_hierarchy thiết lập trong security.yml.Cách lấy hệ thống phân cấp vai trò đầy đủ trong Symfony

role_hierarchy: 
ROLE_USER: [ROLE_ACCESS_USER, ROLE_ACCESS_DATA, ROLE_ACCESS_PRODUCT] 

Sử dụng getRoles() chỉ trả ROLE_USER, làm thế nào tôi có thể biết trong mã của tôi rằng ROLE_USER được thực hiện với ROLE_ACCESS_USER, ROLE_ACCESS_DATA, ROLE_ACCESS_PRODUCT?

cảm ơn vì đã trợ giúp.

+0

nào bạn cần nó làm gì? –

+0

"người dùng" (ROLE_USER) của tôi có một vai trò mặc định, tôi muốn cho phép quản trị viên chỉ cung cấp cho anh vai trò cụ thể, ví dụ: chỉ ROLE_ACCESS_DATA. Tôi muốn làm điều đó thông qua một giao diện hiển thị tất cả các vai trò hiện có. – linibou

Trả lời

34

Bạn có thể lấy thứ bậc từ container:

$container->getParameter('security.role_hierarchy.roles') 
+0

Cảm ơn bạn rất nhiều :-) – linibou

0

Đối với một đại diện đúng đắn về vai trò của bạn, bạn cần đệ quy. Vai trò có thể mở rộng các vai trò khác.

Dưới đây là một ví dụ: https://stackoverflow.com/a/36900807/3635680

+0

Vui lòng trích dẫn nội dung liên quan trong câu trả lời của bạn. Bạn không nên đăng câu trả lời chỉ có liên kết (ngay cả khi liên kết dẫn đến Stack Overflow). –

0

Với tự động hệ thống dây điện được kích hoạt, bạn cũng có thể tiêm trực tiếp các đối tượng RoleHierarchy điền với hệ thống phân cấp vai trò toàn cầu. Đơn giản chỉ cần tiêm RoleHierarchyInterface trong điều khiển hoặc dịch vụ của bạn bằng cách sử dụng dependency injection:

use Symfony\Component\Security\Core\Role\RoleHierarchyInterface; 

// ... 
public function __construct(RoleHierarchyInterface $roleHierarchy) 
{ 
    $this->roleHierarchy = $roleHierarchy; 
} 

Lưu ý: cũng này cho phép bạn gọi getReachableRoles() trên đối tượng RoleHierarchy, mà có thể là hữu ích trong trường hợp của bạn.


Tính đến Symfony4 bạn phải thêm một bí danh cho security.role_hierarchy trong config/services.yml của bạn bằng cách thêm dòng sau:

services: 
    # creating alias for RoleHierarchyInterface 
    Symfony\Component\Security\Core\Role\RoleHierarchyInterface: '@security.role_hierarchy' 
Các vấn đề liên quan