Symfony 3 - 我在管理我的角色时遇到了一些困难
Symfony 3 - I have some difficulties to manage my roles
我正在尝试在我的网站上建立角色。
我有 3 个管理页面:
- /admin/users
- /admin/packages
- /admin/information
ROLE_ADMIN 必须能够访问这些 3 个链接。
ROLE_INFOS 必须能够访问 /admin/information
ROLE_PACKAGES 必须能够访问 /admin/packages
我的 security.php 看起来像:
# app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER, ROLE_INFOS, ROLE_PACKAGES
ROLE_INFOS: ROLE_INFOS, ROLE_USER
ROLE_PACKAGES: ROLE_PACKAGES, ROLE_USER
ROLE_USER: ROLE_USER
//...
access_control:
- { path: ^/admin/paquets, role: ROLE_PACKAGES }
- { path: ^/admin/informations, role: ROLE_INFOS }
- { path: ^/admin, role: ROLE_ADMIN }
- { path: ^/accueil, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: ROLE_USER }
我想知道我的组织方式是否正确?
此外,在我的网站上,我有一个导航栏,它根据用户的角色显示不同的选项卡
我有一个选项卡 "Management",它实际上是一个下拉菜单,指向 3 个可能的链接(包、用户、信息)。
只是,我的base.html.twig中有这个:
{% if is_granted('ROLE_ADMIN') %}
这种情况向我显示了管理员的管理选项卡。我希望为我提到的每个角色显示它 (ROLE_ADMIN、ROLE_INFO、ROLE_PACKAGES)。
我必须做类似的东西吗:
{% if is_granted('ROLE_ADMIN') %} or
{% if is_granted('ROLE_INFOS') %} or
{% if is_granted('ROLE_PACKAGES') %}
感谢您的帮助
您可以像以前那样管理它,但是...
- 您的 security.yml 文件中存在一些错误(层次结构应 return 数组并避免递归数组)
- 在您的 security.yml
中,通过控制器和视图而不是 access_control 管理安全是最简单的
#app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_INFOS, ROLE_PACKAGES]
ROLE_INFOS: [ROLE_USER]
ROLE_PACKAGES: [ROLE_USER]
在您看来,您可以使用以下方法隐藏一些链接:
{% if is_granted('ROLE_ADMIN') %}
<a href="{{ path('packages_foo') }}">Link to admin packages</a>
{% endif %}
请注意,只有控制器中的安全注释管理安全访问。如果您只使用上面的代码,如果用户知道 URL 可以访问管理页面,则可以访问该页面。
在您的控制器中,您可以使用安全注释设置安全性,这比 security.yaml
文件中的 control_access
工具更好:
#src/Controller/PackageController.php
/* ... */
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/* ... */
/**
* Package controller .
*
* @Route("/admin/packages")
*
* @Security("is_granted('ROLE_PACKAGE')")
*/
class PaymentController extends AbstractController
查看 Symfony security annotation 文档。
我正在尝试在我的网站上建立角色。 我有 3 个管理页面:
- /admin/users
- /admin/packages
- /admin/information
ROLE_ADMIN 必须能够访问这些 3 个链接。
ROLE_INFOS 必须能够访问 /admin/information
ROLE_PACKAGES 必须能够访问 /admin/packages
我的 security.php 看起来像:
# app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER, ROLE_INFOS, ROLE_PACKAGES
ROLE_INFOS: ROLE_INFOS, ROLE_USER
ROLE_PACKAGES: ROLE_PACKAGES, ROLE_USER
ROLE_USER: ROLE_USER
//...
access_control:
- { path: ^/admin/paquets, role: ROLE_PACKAGES }
- { path: ^/admin/informations, role: ROLE_INFOS }
- { path: ^/admin, role: ROLE_ADMIN }
- { path: ^/accueil, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: ROLE_USER }
我想知道我的组织方式是否正确?
此外,在我的网站上,我有一个导航栏,它根据用户的角色显示不同的选项卡
我有一个选项卡 "Management",它实际上是一个下拉菜单,指向 3 个可能的链接(包、用户、信息)。
只是,我的base.html.twig中有这个:
{% if is_granted('ROLE_ADMIN') %}
这种情况向我显示了管理员的管理选项卡。我希望为我提到的每个角色显示它 (ROLE_ADMIN、ROLE_INFO、ROLE_PACKAGES)。
我必须做类似的东西吗:
{% if is_granted('ROLE_ADMIN') %} or
{% if is_granted('ROLE_INFOS') %} or
{% if is_granted('ROLE_PACKAGES') %}
感谢您的帮助
您可以像以前那样管理它,但是...
- 您的 security.yml 文件中存在一些错误(层次结构应 return 数组并避免递归数组)
- 在您的 security.yml 中,通过控制器和视图而不是 access_control 管理安全是最简单的
#app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_INFOS, ROLE_PACKAGES]
ROLE_INFOS: [ROLE_USER]
ROLE_PACKAGES: [ROLE_USER]
在您看来,您可以使用以下方法隐藏一些链接:
{% if is_granted('ROLE_ADMIN') %}
<a href="{{ path('packages_foo') }}">Link to admin packages</a>
{% endif %}
请注意,只有控制器中的安全注释管理安全访问。如果您只使用上面的代码,如果用户知道 URL 可以访问管理页面,则可以访问该页面。
在您的控制器中,您可以使用安全注释设置安全性,这比 security.yaml
文件中的 control_access
工具更好:
#src/Controller/PackageController.php
/* ... */
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/* ... */
/**
* Package controller .
*
* @Route("/admin/packages")
*
* @Security("is_granted('ROLE_PACKAGE')")
*/
class PaymentController extends AbstractController
查看 Symfony security annotation 文档。