Symfony2 的 role_hierarchy

2024-03-07

我的 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>

my 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 

edit:

我的观点(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 (master)(并删除了 Acme\DemoBundle)
  2. Added "friendsofsymfony/user-bundle": "dev-master"到composer.json
  3. 创建了新的捆绑包 Mahok\SecurityBundle (php app/console generate:bundle)
  4. 创建了新实体php app/console doctrine:generate:entity
  5. 根据 FOS\UserBundle 文档修改实体(步骤 3;重要提示:将表名称更改为“user”以外的名称,因为这是保留字,可能会引起麻烦!)
  6. 修改的app/AppKernel.php, app/config/config.yml, app/config/routing.yml and app/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. 修改 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 %}
    

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

Hello User!
* ROLE_SUPER_ADMIN
* ROLE_USER
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2 的 role_hierarchy 的相关文章

  • 使用您正在散列的内容的散列作为盐?

    假设用户注册了您的网站 您对他们选择的密码进行哈希处理 然后使用该哈希值作为盐 并使用该盐重新哈希其密码 Example String hash1 MD5 password String endHash MD5 hash1 password
  • 在本地安全存储用于 Web 服务的密码

    我有一个应用程序 通过发送用户名和密码来对第三方 Web 服务进行身份验证 目前 我每次启动应用程序时都会在 winform 上输入密码 但我需要它自动登录 我想比更安全地存储用户名 密码 Dim username as String us
  • 是否可以从 .apk 文件获取 Android.mk 或本机源文件?

    看来从 apk文件中获取Java源文件是很容易的 但是否有可能得到Android mk or native通过工具或棘手的方法从 apk 文件中获取源文件 我正在研究 Android 应用程序本机代码安全性 因此这些文件对我来说非常重要 谢
  • 使用鼠标检测的反验证码

    我想知道是否可以为仅使用 javascript 的表单创建一个安全的人体检测机制 不使用验证码 来检测鼠标移动 因为 jquery 或操作系统代码都可以移动鼠标 我是这么告诉的 这是我的计划 使用 jQuery 我可以检测鼠标是否已移动 然
  • 安装 Symfony 2.4.1 lib-icu 4.4 依赖项时出现问题

    我遇到了与以下相同的问题this one https stackoverflow com questions 16753105 problems with lib icu dependency when installing symfony
  • 限制 SQL Server 连接到特定 IP 地址

    我想将 SQL Server 实例的连接限制为特定 IP 地址 我想阻止来自除特定列表之外的任何 IP 地址的任何连接 这是可以在 SQL Server 实例或数据库中配置的东西吗 听起来像是你会使用Windows防火墙 http tech
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • FOSUserBundle 密码验证

    我正在尝试覆盖 FOSUserBundle 中当前的密码验证 我尝试了几种选择 但仍然找不到解决方案 为了增加密码的 MinLength 我创建了一个validation yml src Acme UserBundle Resources
  • 自定义 Facebook FOSFacebookBundle 登录按钮

    有人知道如何自定义 更改 FosFacebook 登录按钮的图像吗 facebook login button autologoutlink true 并在整页 Facebook 登录上重定向 而不是在弹出窗口上重定向 这使用了 twig
  • Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit 未触发

    我花了几个小时来解决这个问题 但毫无结果 编辑 找到解决方案 参见我的答案 项目背景 我正在构建一个项目Symfony2 这需要一个用于上传大文件的模块 我选择了Node js and Socket IO 我必须从头开始学习 所以我可能会错
  • 使用值填充的 Symfony2 自定义字段类型

    这是先前问题的后续问题Symfony2 自定义表单类型或扩展 https stackoverflow com questions 24079288 symfony2 custom form type or extension 我正在尝试为订
  • 如何从实体内部获取Web目录路径?

    我研究了如何用 Doctrine 处理文件上传 http symfony com doc current cookbook doctrine file uploads html我不想硬编码 DIR web this gt getUpload
  • 在 Symfony3 中覆盖 Doctrine2 类型

    我想用Carbon http carbon nesbot com docs 我的 Symfony 3 2 应用程序中的对象而不是 SPL DateTime 对象 我发现了一组 DoctrineExtension 类here https gi
  • Apache Camel 2.14 Rest DSL 安全

    我想使用 Apache Camel 2 14 中新的 Rest DSL 来创建一个 Rest 接口 我想使用 Jetty 组件 并且我有一个如下所示的基本示例设置 Spring安全配置
  • 无法打开输入文件应用程序/控制台

    我安装了 wamp 服务器和 Symfony2 框架的副本 我正在尝试使用以下命令创建一个捆绑包 php app console generate bundle nampespace IDP IDP Bundle format yml 我的
  • 有没有一种简单的方法可以在 Symfony 中获取 ServerName?

    我一直在寻找一种简单的方法来获取 Symfony 在 Symfony 中运行的机器的 ServerName 以便我的应用程序在具有不同 ServerName 的主机上使用时进行调整 但我找不到 我在 app yml 中创建了一个变量并获取它
  • 在 symfony2 中加载应用程序的自定义配置文件

    我正在开发一个symfony2应用程序 我试图包含我的自定义 yaml 配置位于 src AppBundle Resources Config general yml 我已按照此处提供的示例进行操作http symfony com doc
  • 为 Symfony 指定备用后备路径以查找捆绑包的树枝模板

    基本问题 如何让 symfony 在非标准目录中查找 最佳 自定义 Twig 模板来加载捆绑视图 Symfony 文档说默认情况下它会在两个位置查找覆盖 Twig 模板 http symfony com doc current book t
  • Doctrine EntityManager 清除嵌套实体中的方法

    我想用学说批量插入处理 http doctrine orm readthedocs org en latest reference batch processing html为了优化大量实体的插入 问题出在 Clear 方法上 它表示此方法
  • Symfony 4:添加 Twig_Extension_StringLoader

    在我的 Symfony 4 项目中 我有一个包含 HTML 的变量 我尝试使用 Twig 显示该变量 我想使用template from string 功能但我必须添加Twig Extension StringLoader到 Twig 环境

随机推荐

  • 如何在 JSON 响应反应本机上生成动态 UI

    这里我试图生成动态 UI 通过 API 我得到了一些 JSON 格式的响应 我必须在 UI 上绘制它 就像我没有定义任何 TextInput 一样 它应该动态生成 下面是一些示例 JSON 响应 这可能会根据不同的请求而改变 请帮助 我被困
  • 使用 JavaScript 获取 IE9 中的数据列表选项

    这段代码适用于除 Internet Explorer 9 之外的所有主要浏览器 我不明白我做错了什么 这可能是我错过的一些简单的事情 复制此代码 或使用这个jsFiddle http jsfiddle net Jordan PU9BF 在I
  • 长路径 \\?\ 解决方法在某些安装上不起作用

    我正在开发的应用程序需要处理具有很长文件 路径名的文件 这是一个 Net 4 6 应用程序 因此我实现了 4 6 2 之前的解决方法 以允许使用 语法 如概述的here https stackoverflow com questions 4
  • Neo4j Cypher 查询:顺序集合,取前 n 个元素

    我在为这种社交网络类型的应用程序编写 Cypher 查询时遇到问题 它涉及用户添加帖子 本质上是带有描述的图像 用户可以查看这些帖子 在 Cypher 中 图模型是这样的 user WROTE REVIEW gt review EVALUA
  • 如果在循环中抛出异常,则使用 try-with-resources 出现奇怪的“资源泄漏:流永远不会关闭”

    为什么 Eclipse 给出一个奇怪的 资源泄漏 zin 永远不会关闭 即使我使用以下代码 也会发出警告try with resources Path file Paths get file zip Resource leak warnin
  • 根据指定格式将字符串转换为日期时间

    我希望按照指定的格式得到日期格式的最终 结果 即YYMMDD我怎样才能从下面给出的字符串中得到这个 string s 110326 从字符串到日期 DateTime d DateTime ParseExact s yyMMdd Cultur
  • 在 C++ (Qt) 中实现内省

    我想知道是否有人可以为我澄清以下内容 我即将参加与 Qt 相关的测试 示例问题相当模糊 其中一个问题如下 Qt 在 C 中通过以下方式实现自省 A 自动将每个类定义为 QObject b 定义可以在 QObject 类中调用自身的元对象 C
  • Android 相机拍摄的照片尺寸非常小

    我正在尝试从相机捕获图像 压缩它 然后将其存储到 SD 卡 如果我使用下面的代码直接将其保存到 SD 卡 我会得到完整的图像 但如果我尝试在系统中加载图像 我会得到一个超小的图像尺寸 例如 320 x 240 而不是完整的 5 mp 图像
  • 动态创建新的 PropertyInfo 对象

    这是我的第一篇文章 尽管我在某种程度上搜索了与我的问题相关的主题 但我在找到正确的答案时遇到了很多麻烦 我的问题可能很简单 但我知道答案可能并不那么容易给出 如果有的话 话虽这么说 这就是我的情况 作为示例 我有一个 PropertyInf
  • 通过命令行构建和发布 C# .NET Web 应用程序

    我需要能够通用且单独地构建和发布 C ASP NET Web 应用程序 理想情况下 我想使用 MSBuild 来构建应用程序 如果成功 我想简单地发布该网站 最好仅包含文件副本 目前 我可以使用 MSBuild 轻松构建 Web 应用程序
  • 哈希表。怎么运行的?

    现在 我试图了解如何构建Hashtable 最有趣的是 当对象被添加到Hashtable 我在一本书上读到 第一步 已计算hashCode object 接下来 我们确定该对象在Hashtable obj hashCode Hashtabl
  • ActionScript 3 读取 JPEG 质量

    我正在为 Flash 10 开发图像上传器 有没有办法读取浏览图像的 jpeg 质量 不幸的是 它不能直接完成 品质因数未存储 直接在 JPEG 文件中 这样您 无法读取品质因数 文件 from 页数 更详细地说 使用的量化表 压缩图像存储
  • 使用 avcapturesession 切换相机

    在这里使用本教程 http www musicalgeometry com p 1297 http www musicalgeometry com p 1297我创建了一个自定义叠加层和图像捕获AVCaptureSession 我试图允许用
  • 使用 RubyOnRails 上传 HTML5 FormData 文件

    我使用此脚本在 Rails 3 2 8 应用程序中使用 HTML5 FormData 上传文件 逐一 http jsfiddle net RamPr http jsfiddle net RamPr uploader input file o
  • JavaScript:let、const 提升的区别? [复制]

    这个问题在这里已经有答案了 背景 我有一个函数负责生成随机数并使其可用 use strict module exports function args let min max args let currNumber genRandom mi
  • 移动网络应用程序可以访问设备的电话号码吗?

    例如 移动 Safari 我可以获得设备的电话号码吗 据推测 这会提示用户是否允许 就像位置一样 在某些情况下 该号码可能是通过网络运营商本身的标头发送的 即您不会通过 wifi 看到它 不同的运算符使用不同的标头 e g X UP CAL
  • 打字稿导入导出中持续出现未定义错误

    在多个文件中已经有很多关于打字稿的问题 例如 这个 打字稿导入 导出 https stackoverflow com questions 72692423 typescript import export 有趣的问题和答案 我简化并测试了它
  • 在 SQL Server 中使用链接服务器有哪些缺点?

    是否存在任何巨大的性能问题或安全问题 使用 SQL Server 2005 及更高版本 服务器迁移更加复杂 为多跳设置安全性可能很棘手 非 SQL Server 需要安装本地驱动程序 Sybase DB2 等 集群 异地灾难恢复 注册表项
  • 如何将healpy地图转换并保存到不同的坐标系?

    我有一张带有银河坐标的healpix 地图 我想将该地图转换为赤道坐标系 我知道我可以使用 mollview 函数在赤道坐标中绘制地图 你有什么办法保存这样的转换后的地图吗 谢谢 维努 以下函数更改地图的坐标系 def change coo
  • Symfony2 的 role_hierarchy

    我的 role hierarchy 有一个大问题 security role hierarchy ROLE ADMIN ROLE USER ROLE AUTHOR ROLE MODERATOR ROLE SUPER ADMIN ROLE A