【发布时间】:2014-09-27 15:13:30
【问题描述】:
我正在尝试通过对每个用户使用 USER_ROLE 来实施安全性以限制对特定博客的访问。每个博客页面都有 1 位可以向其发帖的所有者。
这是基于我从 KNP 大学的精彩教程中学到的。
http://knpuniversity.com/screencast/symfony2-ep2
我已经使用 security.yml 中的 access_control 进行了设置,以根据每个用户的 USER_ROLE 限制对每个用户的访问。 (user1 可以访问 /job1/new 和 /job1/create 以便在博客页面上创建/编辑/删除帖子——每个博客页面只有 1 个用户可以访问)
access_control:
- { path: ^/job1/new, roles: [ROLE_USER1, ROLE_ADMIN] }
- { path: ^/job2/new, roles: [ROLE_USER2, ROLE_ADMIN] }
- { path: ^/job3/new, roles: [ROLE_USER3, ROLE_ADMIN] }
- { path: ^/job1/create, roles: [ROLE_USER1, ROLE_ADMIN] }
- { path: ^/job2/create, roles: [ROLE_USER2, ROLE_ADMIN] }
- { path: ^/job3/create, roles: [ROLE_USER3, ROLE_ADMIN] }
每个 /job1、/job2 等都是独立的博客页面。我在 Twig 中使用 if 语句来确定哪个用户有权创建/编辑/删除帖子。
{% if is_granted('ROLE_USER1') %}
<li><a href="{{ path('job1_new') }}">Add New Post</a></li>
{% endif %}
问题是,当我添加更多博客页面时,我需要在访问控制中创建更多路径(例如,/job4、/job5 等),尽管它确实有效,但这并不是一个理想的解决方案。
我在下面的链接中详细介绍了代码,因为建议在控制器中使用基于与 Ryan Weaver 的 Disqus 对话“joe joe”的安全性 ---http://knpuniversity.com/screencast/symfony2-ep2
我的问题是:
1) 现在我已经与 User 和 Category 创建了 ManyToMany 关系,如何在控制器中设置安全性以防止其他用户访问他们没有角色的创建/编辑/删除操作?
2) 如何在 Twig 中隐藏选项以使用此方法创建/编辑/删除/以及使用此方法在 access_control 中添加什么?
【问题讨论】:
标签: security symfony user-roles