Symfony 2带有PUGXMultiUserBundle和多登录表单

时间:2015-07-31 14:54:22

标签: php symfony fosuserbundle pugxmultiuserbundle

这里是我的问题:我的应用程序中有两类用户(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文件中创建不同的“角色”?

非常感谢。

1 个答案:

答案 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');
};

我希望这会对你有所帮助,我知道这对新手来说是怎样的,因为我去过那里。慢慢来,如果你需要任何帮助我就在这里。