这里是我的问题:我的应用程序中有两类用户(locataires和propriétaires),我需要一个(或两个)登录表单。我使用PUGXMultiUserBundle来管理我的所有用户。
这是loggin“proprietaires”的视图:
{% extends "::layout.html.twig" %}
{% block title %}
Nous contacter - {{ parent() }}
{% endblock %}
{# Contents #}
{% block body %}
<div class="row">
<div class="col-md-12">
<div class="well">
<form action="{{ path('proprietaire_login_check') }}" method="post">
<fieldset>
<legend><i class="fa fa-lock"></i> Secure Sign in</legend>
<div class="form-group">
<label for="username">Username</label>
<input type="text" id="username" name="_username" value="" class="form-control"/>
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" id="password" name="_password" class="form-control" />
</div>
<button type="submit" class="btn btn-primary">
<i class="fa fa-sign-in"></i> Sign in
</button>
</fieldset>
</form>
</div>
</div>
</div>
{% endblock %}
我的文件app / config / config.yml:
fos_user:
db_driver: orm
firewall_name: main
user_class: AppBundle\Entity\User
service:
user_manager: pugx_user_manager
pugx_multi_user:
users:
proprietaire:
entity:
class: AppBundle\Entity\Proprietaire
# factory:
registration:
form:
type: AppBundle\Form\Type\RegistrationProprietaireFormType
name: fos_user_registration_form
validation_groups: [Registration, Default]
template: proprietaire.form.html.twig
profile:
form:
type: AppBundle\Form\Type\ProfileProprietaireFormType
name: fos_user_profile_form
validation_groups: [Profile, Default]
locataire:
entity:
class: AppBundle\Entity\Locataire
registration:
form:
type: AppBundle\Form\Type\RegistrationLocataireFormType
template: locataire.form.html.twig
profile:
form:
type: AppBundle\Form\Type\ProfileLocataireFormType
我的文件app / config / security.yml:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
in_memory:
memory: ~
fos_userbundle:
id: fos_user.user_manager
proprietaire:
entity:
class: AppBundle:Proprietaire
property: username
locataire:
entity:
class: AppBundle:Locataire
property: username
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
# form_login:
# provider: fos_userbundle
# csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
# logout:
# path: /logout
# target: /
anonymous: true
proprietaire_firewall:
pattern: .*
form_login:
# Soumet le formulaire de connection ici
provider: fos_userbundle
check_path: /proprietaire_login_check
logout:
path: /proprietaire_logout
target: /
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, role: ROLE_USER }
我从symfony 2开始,我不明白如何为用户“proprietaires”和另一个用户“locataires”创建登录表单。以及如何在security.yml文件中配置不同防火墙?
另一个问题:在您看来,我必须在security.yml文件中创建不同的“角色”?
非常感谢。
答案 0 :(得分:2)
PUGXMultiUserBundle构建在FOSUserBundle之上,它有助于使用doctrine表继承管理不同类型的用户,查看您的数据库,您可以看到如何存在父表“User”和两个子表“locataire”和“的Propriétaire”。不同类型的用户意味着存在差异的点;例如:用户注册:表单的字段存在差异,配置文件编辑表单也不同。所有其他用户之间没有区别,登录网站,个人资料页面,注销行动......都像往常一样由FOSUserBundle处理。
具体来说,是的,您可以为两个用户使用一个登录表单(实际上我正在为三个不同的用户使用登录表单)。每个用户不需要防火墙,一个防火墙就足够了。是的,您可能需要在访问控制部分定义角色,因为您必须仅保护与locataire相关的URL,例如:/ locataire / pays / rent / 1,(为用户提供角色的最佳方式是在这样的类构造函数中:
main :: IO ()
main = return $! last $ repeat ()
)
所以在你的security.yml文件中:
public function __construct() {
parent::__construct();
$this->roles = array('ROLE_LOCATAIRE');
};
我希望这会对你有所帮助,我知道这对新手来说是怎样的,因为我去过那里。慢慢来,如果你需要任何帮助我就在这里。