簡體   English   中英

Symfony 3-我在管理角色方面遇到一些困難

[英]Symfony 3 - I have some difficulties to manage my roles

我正在嘗試在我的網站上建立角色。 我有3個管理頁面:

  • /管理/用戶
  • /管理/包
  • /管理/信息

ROLE_ADMIN必須能夠訪問這3個鏈接。

ROLE_INFOS必須能夠訪問/ admin /信息

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 }

我想知道我的組織方式是否正確?

此外,在我的網站上,我有一個導航欄,根據用戶的角色顯示不同的選項卡

我有一個“管理”選項卡,它實際上是一個指向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') %}

謝謝你的幫助

您可以按已完成的方式進行管理,但是...

  1. 您的security.yml文件中存在一些錯誤(層次結構應返回數組,避免遞歸數組)
  2. 通過控制器和視圖而不是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 %}

請注意,只有Controller中的安全注釋才能管理安全訪問。 如果僅使用上面的代碼,則只要用戶知道訪問管理頁面的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安全注釋文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM