Maison > Questions et réponses > le corps du texte
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
伊谢尔伦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.
某草草2017-05-16 16:48:22
Merci beaucoup pour votre réponse. L'ACL intégrée est en effet très puissante
.