fosuserbundle - Symfony3 + FosUserBundle + EasyAdminBundle

标签 fosuserbundle symfony symfony2-easyadmin

我想创建一个新表单来创建新用户。我使用以下函数创建了自己的 AdminController:

public function createNewUsersEntity()
{
   return $this->container->get('fos_user.user_manager')->createUser();
}

public function prePersistUsersEntity(User $user)
{
   $this->get('fos_user.user_manager')->updatePassword($user);
   $this->container->get('fos_user.user_manager')->updateUser($user, false);
}

public function preUpdateUsersEntity(User $user)
{
 $this->get('fos_user.user_manager')->updatePassword($user);
   $this->container->get('fos_user.user_manager')->updateUser($user, false);
}

但是密码未加密

这是我的 config.yml 文件:

fos_user:
    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
    firewall_name: main
    user_class: AppBundle\Entity\User
    use_listener: false

在我的 security.yml 文件中:

应用程序/config/security.yml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle: 
            id: fos_user.user_provider.username

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
                always_use_default_target_path: true
                default_target_path: /admin
                failure_path: /
                # if you are using Symfony < 2.8, use the following config instead:
                # csrf_provider: form.csrf_provider

            logout:       true
            anonymous:    true

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }

这是我的User实体的构造函数:

public function __construct()
{
     parent::__construct();
}

另一方面,当用户添加到系统中时,我需要它具有 ROLE_USER 角色,但我不知道如何更改它。

两个问题:密码未加密角色未定义。

最佳答案

您在文档中找到的所有内容,我检查了项目中的所有说明,并且一切正常。

Generated form

重写 EasyAdminController 方法(创建您自己的 Controller 实现):

<?php

namespace AdminPanelBundle\Controller;

use JavierEguiluz\Bundle\EasyAdminBundle\Controller\AdminController as EasyAdminController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;

class AdminController extends EasyAdminController
{
    /**
     * @Route("/", name="easyadmin")
     * @param Request $request
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
     */
    public function indexAction(Request $request)
    {
        return parent::indexAction($request);
    }

    public function createNewUserEntity()
    {
        return $this->get('fos_user.user_manager')->createUser();
    }

    public function prePersistUserEntity($user)
    {
        $this->get('fos_user.user_manager')->updateUser($user, false);
    }

    public function preUpdateUserEntity($user)
    {
        $this->get('fos_user.user_manager')->updateUser($user, false);
    }

}

我的用户实体名称是“User”,如果您的名称不同请更改方法名称。

将此代码添加到配置文件(config.yml):

easy_admin:
    entities:
        User:
            class: AppBundle\Entity\User
            form:
                fields:
                    - username
                    - email
                    - enabled
                    - lastLogin
                    # if administrators are allowed to edit users' passwords and roles, add this:
                    - { property: 'plainPassword', type: 'text', type_options: { required: false } }
                    - { property: 'roles', type: 'choice', type_options: { multiple: true, choices: { 'ROLE_USER': 'ROLE_USER', 'ROLE_ADMIN': 'ROLE_ADMIN' } } }

现在打开你的routing.yaml,资源参数应该指向新的 Controller :

admin_panel:
    resource: "@AdminPanelBundle/Controller/"
    type:     annotation
    prefix:   /admin

我的代码在 security.yml 中:

security:
  encoders:                                    #
      AppNg\Symfony\AuthBundle\Entity\User:    # Try add this...
          algorithm: bcrypt                    #

  role_hierarchy:
      ROLE_ADMIN:       ROLE_USER
      ROLE_SUPER_ADMIN: ROLE_ADMIN

  # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
  providers:
      fos_userbundle:
          id: fos_user.user_provider.username

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

      admin:
        pattern: ^/admin
        logout:
          path: /admin/logout
          target: /admin/login
        anonymous: ~
        form_login:
          provider: fos_userbundle
          login_path: fos_user_security_login
          check_path: fos_user_security_check
          always_use_default_target_path: true
          default_target_path: '/admin'
          csrf_token_generator: security.csrf.token_manager

  access_control:
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/logout, role: ROLE_ADMIN }
    - { path: ^/admin, role: ROLE_ADMIN }

关于fosuserbundle - Symfony3 + FosUserBundle + EasyAdminBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39042138/

相关文章:

forms - Symfony升级2.1 FOSUserBundle自定义注册表异常

Symfony 3.4.0 找不到任何要加载的 fixture 服务

Symfony EasyAdminBundle : Filter entities in assotiation field

symfony2-easyadmin - EasyAdmin Symfony 日期从 2012 年开始到 2022 年底

symfony - 使用 FOSUserBundle 与基于 yml 的实体相关

php - FOSUserBundle BCryptPasswordEncoder 加盐

symfony - FOSUserBundle 没有配置编码器 : creating a new user

php - 在 Symfony2 中从实体和存储库登录的正确方法

php - Symfony 2.3.7 查询结果中的表单值

php - 可捕获的 fatal error : Object of class Proxies\__CG__\AppBundle\Entity\Modelo could not be converted to string