Tôi có một vấn đề lớn với role_hierarchy tôi,role_hierarchy với Symfony2
security:
role_hierarchy:
ROLE_ADMIN:[ROLE_USER,ROLE_AUTHOR,ROLE_MODERATOR]
ROLE_SUPER_ADMIN:[ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH]
với điều đó, nếu tôi đã nhận vai trò SUPER_ADMIN, tôi sẽ nhận được các ROLE_AUTHOR, ROLE_MODERATOR, ROLE_USER VÀ ROLE_ADMIN. Nhưng vấn đề của tôi là khi tôi đăng nhập trên trang web của mình, nếu tôi kiểm tra hồ sơ, tôi có thể thấy tôi chỉ nhận được ROLE_SUPER_ADMIN, chứ không phải vai trò khác, vì vậy, bạn có thể giúp tôi không?
quan điểm của tôi (base.html.twig
)
<h3>Blog</h3>
<ul class="nav nav-pills nav-stacked">
<li><a href="{{ path('dom_home') }}">Home Page</a></li>
{% if is_granted('ROLE_AUTHOR') %}
<li><a href="{{ path('dom_add') }}">Add a post</a></li>
{% endif %}
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
<li><a href="{{ path('fos_user_security_logout') }}">Logout</a></li>
{% else %}
<li><a href="{{ path('fos_user_security_login') }}">login</a></li>
<li><a href="{{ path('fos_user_registration_register') }}">register</a></li>
{% endif %}
</ul>
tôi security.yml
(app/config)
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: [ROLE_USER,ROLE_AUTHOR,ROLE_MODERATOR]
ROLE_SUPER_ADMIN: [ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
fos_userbundle:
id: fos_user.user_manager
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/(login$|register|resetting)
anonymous: true
main:
pattern: ^/
form_login:
provider: fos_userbundle
remember_me: true
always_use_default_target_path: true
default_target_path: /dom/
remember_me:
key: %secret%
anonymous: false
logout: true
chỉnh sửa:
quan điểm của tôi (base.html.twig)
<h3>Blog</h3>
<ul class="nav nav-pills nav-stacked">
<li><a href="{{ path('dom_home') }}">Home Page</a></li>
{% if is_granted('ROLE_AUTHOR') %}
<li><a href="{{ path('dom_add') }}">Add a post</a></li>
{% endif %}
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
<li><a href="{{ path('fos_user_security_logout') }}">Logout</a></li>
{% else %}
<li><a href="{{ path('fos_user_security_login') }}">login</a></li>
<li><a href="{{ path('fos_user_registration_register') }}">register</a></li>
{% endif %}
</ul>
security.yml tôi (app/config)
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: [ROLE_USER,ROLE_AUTHOR,ROLE_MODERATOR]
ROLE_SUPER_ADMIN: [ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
fos_userbundle:
id: fos_user.user_manager
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/(login$|register|resetting)
anonymous: true
main:
pattern: ^/
form_login:
provider: fos_userbundle
remember_me: true
always_use_default_target_path: true
default_target_path: /dom/
remember_me:
key: %secret%
anonymous: false
logout: true
hãy trả lời :)
Phân cấp không có nghĩa là bạn được thêm rõ ràng vào các vai trò này, tức là khi bạn kiểm tra profiler bạn không thấy tất cả các vai trò. Nó chỉ có nghĩa là, truy cập được "kế thừa".Nói cách khác, khi bạn hạn chế quyền truy cập vào một hành động đối với ROLE_MODERATOR, ngay cả khi bạn không được chỉ định vai trò này, bạn vẫn có thể truy cập hành động khi ROLE_SUPER_ADMIN kế thừa quyền truy cập. – dbrumann
ok, nhưng nếu tôi đang làm is_granted ('ROLE_MODERATOR'), tôi sẽ có thể truy cập vào nó? Giống như: {% if is_granted ('ROLE_MODERATOR')%} người kiểm duyệt {% else%} không có người kiểm duyệt {% endif%}, trong mẫu ghép, tôi có thể xem người kiểm duyệt? – Stickly
Tôi vừa thử điều này và nó không hoạt động – Stickly