Maison  >  Questions et réponses  >  le corps du texte

Symfony2 nécessite un contrôleur comme fichier d'entrée pour le bundle afin de restreindre les autorisations.

Utilisez-vous ControllerListener.php pour la surveillance/

1. Je souhaite savoir comment restreindre les droits d'accès de plusieurs bundles via le même contrôleur. Par exemple, si l'utilisateur n'est pas connecté, accédez directement à la page d'accueil ou à la page de connexion.
2. Comment définir les autorisations d'accès pour un bundle. C'est basé sur l'utilisateur

为情所困为情所困2684 Il y a quelques jours432

répondre à tous(2)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-05-16 16:48:22

    C’est trop flexible et comporte trop de méthodes. Écrivons un aspect pour l’instant :

    .

    Il existe un package de fonctions utilisateur tiers : FOSUserBundle

    Si vous l'écrivez vous-même, avant d'utiliser le formulaire de connexion, vous devez indiquer au framework comment les informations utilisateur sont enregistrées. Si vous utilisez Doctrine et une base de données, vous devez écrire une entité utilisateur et implémenter l'interface SymfonyComponentSecurityCoreUserUserInterface.

    (1) Créer une classe d'utilisateurs

    namespace Acme\UserBundle\Entity;
    
    use Symfony\Component\Security\Core\User\UserInterface;
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * @ORM\Entity
     */
    class User implements UserInterface
    {
        /**
         * @ORM\Column(type="string", length=255)
         */
        protected $username;
    
        // ...
    }

    (2) Utilisez cette classe d'utilisateurs

    # app/config/security.yml
    security:
        # ...
        providers:
            main:
                entity: { class: Acme\UserBundle\Entity\User, property: username }
        encoders:
            Acme\UserBundle\Entity\User: sha512 # 密码用哪种hash保存

    (3) Ajouter un contrôle d'autorisation

    La vérification de sécurité peut être contrôlée au niveau de l'URL. Si vous laissez votre bundle partager une certaine règle d'URL, vous pouvez utiliser une règle pour la contrôler :

    # app/config/security.yml
    security:
        # ...
        access_control:
            - { path: ^/some_url, roles: ROLE_USER } # role是用户需要具备的角色,登录成功默认会有ROLE_USER

    Vous pouvez également utiliser le JMSSecurityExtraBundle fourni avec Symfony 2, qui peut être configuré avec des annotations :

    use JMS\SecurityExtraBundle\Annotation\Secure;
    
    class MyController
    {
        /**
         * @Secure(roles="ROLE_USER")
         */
        public function secureAction()
        {
            // ...
        }
    }

    Symfony 2 possède de nombreux éléments de configuration de composants de sécurité, vous pouvez vous référer à : http://symfony.com/doc/current/refere...

    La vérification du formulaire (form_login), qui est le formulaire de boîte de connexion le plus courant, est l'une des méthodes de vérification prises en charge par défaut par les composants de sécurité Symfony 2. D'autres incluent X.509, HTTP Basic, HTTP Digest, etc., et peuvent également l'être. vérifié par des tiers Le package de code ajoute d'autres méthodes de vérification. Les éléments de configuration de la validation du formulaire sont les suivants, j'ai commenté quelques éléments couramment utilisés :

    form_login:
        check_path: /login_check # 登录校验URL
        login_path: /login # 登录表单页
        use_forward: false
        always_use_default_target_path: false # 登录后是否总是跳向指定目标页
        default_target_path: / # 登录后的目标页
        target_path_parameter: _target_path # 在登录表单里指定目标页使用的input name
        use_referer: false
        failure_path: /foo
        failure_forward: false
        failure_handler: some.service.id # 自定义登录失败的处理
        success_handler: some.service.id # 自定义登录成功的处理
        username_parameter: _username # 登录表单里用户名的input name
        password_parameter: _password # 登录表单里用户名的input name
        csrf_parameter: _csrf_token
        intention: authenticate
        csrf_provider: my.csrf_provider.id
        post_only: true
        remember_me: false # 是否启用“记住我”功能

    Il existe également des ACL intégrées qui offrent un contrôle plus précis. Mais c’est un autre grand chapitre.

    répondre
    0
  • 某草草

    某草草2017-05-16 16:48:22

    Merci beaucoup pour votre réponse. L'ACL intégrée est en effet très puissante

    .

    répondre
    0
  • Annulerrépondre