gpt4 book ai didi

security - Symfony2 的 role_hierarchy

转载 作者:行者123 更新时间:2023-12-02 21:32:46 25 4
gpt4 key购买 nike

我的 role_hierarchy 有一个大问题,

security:
role_hierarchy:
ROLE_ADMIN:[ROLE_USER,ROLE_AUTHOR,ROLE_MODERATOR]
ROLE_SUPER_ADMIN:[ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH]

这样,如果我获得了 SUPER_ADMIN 角色,我将获得 ROLE_AUTHOR、ROLE_MODERATOR、ROLE_USER 和 ROLE_ADMIN。但我的问题是,当我登录我的网站时,如果我检查分析器,我可以看到我只有 ROLE_SUPER_ADMIN,而不是其他角色,所以,你能帮助我吗?

我的观点(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(应用程序/配置)

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

编辑:

我的观点(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(应用程序/配置)

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

请回答:)

最佳答案

我无法从您提供的代码片段中看出问题所在,因此我制作了一个小示例应用程序来为您提供逐步说明,这可能会引导您找到问题的根源。

  1. 克隆 symfony-standard(主版)(并删除 Acme\DemoBundle)
  2. 在composer.json中添加了"friendsofsymfony/user-bundle": "dev-master"
  3. 创建了新包 Mahok\SecurityBundle (php app/console generated:bundle)
  4. 创建了新实体 php app/console 学说:generate:entity
  5. 根据 FOS\UserBundle 文档修改实体(第 3 步;重要提示:将表名称更改为“user”以外的名称,因为这是保留字,可能会引起麻烦!)
  6. 修改了 app/AppKernel.phpapp/config/config.ymlapp/config/routing.ymlapp/config/security.yml 根据 FOS\UserBundle 文档。供引用:这是我使用的 security.yml:

    jms_security_extra:
    secure_all_services: false
    expressions: true

    security:
    encoders:
    FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
    ROLE_AUTHOR: [ROLE_USER]
    ROLE_MODERATOR: [ROLE_AUTHOR]
    ROLE_ADMIN: [ROLE_MODERATOR]
    ROLE_SUPER_ADMIN: [ROLE_ADMIN]

    providers:
    fos_userbundle:
    id: fos_user.user_manager

    firewalls:
    dev:
    pattern: ^/(_(profiler|wdt)|css|images|js)/
    security: false

    auth:
    pattern: (^/login$|^/register|^/resetting)
    anonymous: true

    main:
    pattern: ^/
    form_login:
    provider: fos_userbundle
    csrf_provider: form.csrf_provider
    logout: true
    anonymous: true

    access_control:
    - { path: ^/admin, role: ROLE_ADMIN }
  7. 使用 `php app/console fos:user:create sa --super-admin

  8. 创建用户
  9. 修改 Mahok\SecurityBundle 中的 DefaultController:default.html.twig,检查 {% is_granted('ROLE_MODERATOR') %}:

    Hello {{ name }}!
    {% if is_granted('ROLE_MODERATOR') %}
    <ul>
    {% for role in app.user.roles %}
    <li>{{ role }}</li>
    {% endfor %}
    </ul>
    {% else %}
    oh noes!
    {% endif %}

编辑:当转到 localhost/example/app_dev.php/hello/User 时(以“sa”身份登录后),我得到以下输出:

Hello User!
* ROLE_SUPER_ADMIN
* ROLE_USER

关于security - Symfony2 的 role_hierarchy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11019937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com