Symfony2 nécessite un contrôleur comme fichier d'entrée pour le bundle afin de restreindre les autorisations.
为情所困
为情所困 2017-05-16 16:46:22
0
2
495

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

为情所困
为情所困

répondre à tous(2)
伊谢尔伦

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.

某草草

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

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal