2016-08-19 7 views
1

新しいユーザーを作成するためにバックエンドに新しいフォームを作成したいと考えています。私はこの機能を持つ私自身のAdminControllerを作成します:Symfony3 + FosUserBundle + EasyAdminBundle

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); 
} 

私が持っている問題:パスワードは暗号化されていません。

アプリ/設定/ security.ymlファイル

セキュリティ: エンコーダ:私のsecurity.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 

:私のconfig.ymlファイルで

私はこの構成を有している 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 } 

と、これは私のユーザエンティティにおける構造です:別の手で

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

、ユーザーがシステムに追加されたとき、私はROLE_USERのROLでそれを必要としますが、私は変更のために何ができるか分かりませんそれ。

2つの問題:パスワードは暗号化されず、役割は定義されていません。

答えて

2

ドキュメントに記載されている内容はすべて、プロジェクトのすべての手順を確認しても問題ありません。

Generated form

オーバーライドEasyAdminController方法(独自のコントローラの実装を作成):あなたの名前は異なる変更方法の名前である場合

<?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); 
    } 

} 

マイユーザエンティティ名は、 "ユーザー" です。

設定ファイル(config.yml)にこのコードを追加します。今すぐあなたのrouting.yamlを開く

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' } } } 

、リソースパラメータが新しいコントローラを指している必要があります:

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 } 
+1

@ KrzysztofRaciniewski「Rola administratora」としてROLE_ADMINをどのように表示しましたか?それは翻訳か小枝か多分何か他のものを使って行われますか? – fadehelix

+1

簡単な翻訳。 /app/config/Resources/translationsに "messages.en.yml"というファイルを作成し、 "ROLE_ADMIN: 'your_translation_for_key'"という行を追加します –

関連する問題