jairwin/user-bundle

此包为Symfony 3项目提供用户管理和表单。

安装: 64

依赖者: 0

建议者: 0

安全: 0

星星: 1

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

v1.1.7 2018-07-02 18:17 UTC

This package is auto-updated.

Last update: 2024-09-23 08:17:49 UTC


README

此包为Symfony3项目提供用户管理和表单。

安装

步骤 1:下载包

打开命令行,进入项目目录,执行以下命令以下载此包的最新稳定版本

$ composer require jairwin/user-bundle

此命令需要您已全局安装Composer,如Composer文档中的安装章节所述。

步骤 2:启用包

通过将它们添加到app/AppKernel.php中注册的包列表中来启用包和依赖包。

// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...

            new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
            new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
            new EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle(),
            new JAI\Bundle\UserBundle\JAIUserBundle(),
        );

        // ...
    }

    // ...
}

步骤 3:添加路由

要添加提供的路由,请更新app/config/routing.yml

# app/config/routing.yml

jai_user:
    resource: "@JAIUserBundle/Resources/config/routing.yml"
    prefix:   /
logout:
    path: /logout

步骤 4:配置ReCaptcha

此包使用EZRecaptchaBundle,配置在app/config/config.yml中(文档:EWZRecaptcha on GitHub

# app/config/config.yml

ewz_recaptcha:
    public_key:  here_is_your_public_key
    private_key: here_is_your_private_key
    locale_key:  %kernel.default_locale%

对于开发,您需要在生产环境之外的所有地方提供单独的配置,使用公开的测试密钥(文档:Google Recaptcha FAQ)。您可以将密钥存储在parameters.yml中,或者将ewz_recaptcha配置添加到config_dev.ymlconfig_prod.ymlconfig_test.yml而不是config.yml中。

步骤 5:启用翻译

要获取正确的表单标签和占位符,请启用翻译。在新的Symfony3项目中,需要在app/config/config.yml中取消注释。

# app/config/config.yml

framework:
    translator:      { fallbacks: ["%locale%"] }

并在app/config/parameters.yml中设置区域设置

# app/config/parameters.yml

    locale: en

注意 - 到目前为止,此包只提供了英文翻译。大多数默认值都很丑陋。

步骤 6:配置必需参数

确保在app/config/parameters.yml中您的数据库和邮件发送参数正确。您还需要添加site_namefrom_email参数。

# app/config/parameters.yml

parameters:
    database_host: 127.0.0.1
    database_port: null
    database_name: your_database_name
    database_user: your_database_user
    database_password: your_database_user_password
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: your_mail_user
    mailer_password: your_mail_password
    secret: somethingmorerandomthanthis
    locale: en
# JAI User Bundle Configuration
    site_name:  My Great Website
    from_email:  greeter@yourdomain.tld

步骤 7:配置安全

根据您的需要配置安全(文档:Symfony Book中的安全)。这里有一个您可以开始的示例

# app/config/security.yml

security:
    encoders:
        JAI\Bundle\UserBundle\Entity\User:
            algorithm: bcrypt
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER

    # https://symfony.com.cn/doc/current/book/security.html#where-do-users-come-from-user-providers
    providers:
        our_db_provider:
            entity:
                class: JAIUserBundle:User

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            anonymous: ~
            form_login:
                login_path: jai_user_login
                check_path: jai_user_login
                username_parameter: login[username]
                password_parameter: login[password]
                provider: our_db_provider
            logout:
                path:   /logout
                target: /
            remember_me:
                secret: "preferablysomethingmoresecretthanthis"
                remember_me_parameter: login[remember]
                
    access_control:
        # require ROLE_ADMIN for /admin*
        #- { path: ^/admin, roles: ROLE_ADMIN }
        # require ROLE_USER for /user*
        - { path: ^/user, roles: ROLE_USER }

目前,我们已经禁用了管理员页面的防火墙,这有原因。我们稍后会修复它。

步骤 8:初始化数据库

从控制台更新数据库模式并加载初始角色

$ php bin/console doctrine:schema:update --force
$ php bin/console doctrine:fixtures:load

步骤 9:创建管理员用户

此时所有路由都应该工作,因此您可以通过访问/register来注册新用户。如果电子邮件配置正确,则会发送激活电子邮件。使用激活电子邮件中的链接将使您进入带有消息“您的账户现在已激活”的登录页面。现在转到/admin/user,点击您新用户的名字,您将看到显示的个人信息。找到“可用角色”下名为“ROLE_ADMIN”的按钮并点击它。选定的用户将更新为角色ROLE_ADMIN。

步骤 10:保护管理员页面

现在我们有了管理员用户,我们将在app/config/security.yml中修复管理员防火墙。只需取消注释即可

# app/config/security.yml

    access_control:
        # require ROLE_ADMIN for /admin*
        - { path: ^/admin, roles: ROLE_ADMIN }
        # require ROLE_USER for /user*
        - { path: ^/user, roles: ROLE_USER }

现在您只能以具有角色ROLE_ADMIN的用户登录访问/admin/user(实际上由于您可能还有其他管理页面,所以是/admin/*)。

使用:

此包提供了/register/activate/login/logout/user/profile/forgot/reset/admin/user等路由。它们的目的应该不言而喻。表单使用Symfony表单组件(文档:Symfony Book中的表单),因此它们将使用表单主题(文档:Symfony Book中的表单主题)。

为了使路由在视觉上与您自己的网站保持一致,首先重写UserBundle/Resources/views/base.html.twig以扩展您自己的模板。

{# UserBundle/Resources/views/base.html.twig #}

{% extends 'base.html.twig' %}
{% block body %}
	{% block user %}{% endblock %}
{% endblock %}

升级:

某些升级将包括数据库模式更改。更新后,您可能需要备份您的数据库并运行doctrine迁移。

$ php bin/console doctrine:migrations:diff
$ php bin/console doctrine:migrations:migrate

总是首先备份您的数据库!例如,v1.1.0重命名了表以避免可能的冲突。Doctrine将其差异作为DROP旧_table_name,ADD新_table_name。在这种情况下,阅读差异会告诉您将发生什么,并且您需要备份来将用户、角色和用户角色连接表数据恢复到重命名的表中。

待办事项:

单元测试:

目前没有单元测试,这显然是不正确的。

移除EWZRecaptchaBundle依赖:

如果有一个可选设置,例如“使用验证码”,然后进一步设置,例如仅在达到一定数量的垃圾邮件后要求,以及与当前项目中使用的任何验证码实现相关的具体设置,那就更好了。

用户管理功能:

应在管理页面上添加“删除用户”。目前,您只能通过直接访问数据库来删除用户。

“删除非活动用户” - 指定自注册以来的天数,以显示未激活的账户。视图应是一个包含每个非活动用户的复选框的表格,以及一个“删除标记”按钮。

目前用户是从用户名下拉列表中选择进行编辑的。需要一个“查找用户”功能,可以通过用户名或电子邮件进行搜索。这对于拥有大量用户的网站尤其需要。

用户管理管理角色:

这有点棘手,因为理想情况下,您应该能够添加角色并更改层次结构。目前,角色在数据库中,而层次结构在app/config/security.yml中。