标签: fosuserbundle

Symfony2:FosUserBundle中的多租户角色

所以我正在开发一个具有多个客户端的应用程序.在每种情况下,用户可以访问具有不同角色的多个客户端.例如,用户A具有ROLE_XX用于客户端C1,但ROLE_YY客户端C2.

据我所知,FosUserBundle将用户的角色存储在列角色(默认表fos_user)中,因此该结构不适合我的需要.

我已经阅读了与角色管理相关的文档,但没有任何相关内容,所以我猜这是超出FosUserBundle范围的功能

所以我在考虑创建一个与它们相关的附加表(客户端,用户,角色),但由于我根本不是FOS专家,所以我真的不知道这是否是正确的方法.或者也许我错过了什么.任何提示表示赞赏!

multi-tenant symfony fosuserbundle

4
推荐指数
1
解决办法
1458
查看次数

用户使用FOSUserBundle更新配置文件时忽略密码

我正在使用FOSUserBundle,我正在尝试创建一个允许用户更新其用户配置文件的页面.我面临的问题是,如果用户不想更改/更新密码,我的表单不需要用户重新输入密码.因此,当用户使用空密码提交表单时,数据库将使用空字符串进行更新,并且用户将无法登录.

如果未设置密码字段,如何让我的表单忽略更新密码字段?以下是我正在使用的代码.

$user = $this->get('security.context')->getToken()->getUser();

//user form has email and repeating password fields    
$userForm = $this->createForm(new UserFormType(), $user);

if ($request->getMethod() == 'POST') {
   $userForm->bindRequest($request);

   if($userForm->isValid()){
      //this will be be empty string in the database if the user does not enter a password
      $user->setPlainPassword($userForm->getData()->getPassword());
      $em->flush();
   }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了一些如下所示的东西,但这仍然是空的,因为bindRequest将空密码设置为用户

if($userForm->getData()->getPassword())
   $user->setPlainPassword($userForm->getData()->getPassword());
Run Code Online (Sandbox Code Playgroud)

我也尝试过,但这会导致类似的情况并导致不必要的查询

if($userForm->getData()->getPassword())
   $user->setPlainPassword($userForm->getData()->getPassword());
else
   $user->setPlainPassword($user->getPlainPassword());
Run Code Online (Sandbox Code Playgroud)

有没有优雅的方法来处理这个用例?

symfony doctrine-orm fosuserbundle

4
推荐指数
1
解决办法
6877
查看次数

禁用SonataUserBundle sonata.user.admin.group服务

我正在使用SonataAdminBundle和SonataUserBundle.

SonataUserBundle注册SonataAdminBundle sonata.user.admin.group自动检测的服务,以设置管理仪表板中的链接以对CRUD操作进行分组.

我怎么禁用sonata.user.admin.group?我一直在Symfony2文档中遵循这些配方:

到目前为止,我在bundle定义中有以下代码来添加编译器传递:

public function build(ContainerBuilder $container)
{
  parent::build($container);

  $container->addCompilerPass(new CompilerPass());
}
Run Code Online (Sandbox Code Playgroud)

这里是编译器传递:

<?php

namespace NS\Service\CompilerPass;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class CompilerPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
       $container->removeDefinition('sonata.user.admin.group');
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这应该有效但不行.Symfony正在抛出异常,告诉我sonata.user.admin.group服务不存在.但它存在,如果我这样做$container->getDefinition('sonata.user.admin.group'),实际的定义是返回.

谢谢

php dependency-injection symfony fosuserbundle sonata-admin

4
推荐指数
1
解决办法
3299
查看次数

FOSUserBundle不会使用trans_default_domain进行翻译

我正在使用Symfony 2.3 RC1设置FOSUserBundle dev-master,但翻译效果不佳.默认情况下,模板中包含trans_default_domain

在登录模板中.它不适用于trans_default_domain

{% trans_default_domain "FOSUserBundle" %}
<label class="control-label" for="username">{{ 'security.login.username'|trans }}</label>
Run Code Online (Sandbox Code Playgroud)

但使用trans({},'FOSUserBundle')它的工作原理

<label class="control-label" for="username">{{ 'security.login.username'|trans({}, 'FOSUserBundle') }}</label>
Run Code Online (Sandbox Code Playgroud)

trans_default_domain有什么问题?需要任何额外的配置?

symfony fosuserbundle symfony-2.3

4
推荐指数
1
解决办法
5301
查看次数

如何在symfony2中保护除登录页面之外的整个页面?

我希望通过FOSUserBundle登录来保护整个站点.我试着像这样设置security.yml

security:
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    FOS\UserBundle\Model\UserInterface: sha512

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
    fos_userbundle:
        id: fos_user.user_manager

firewalls:
    main:
        pattern:    ^/
        form_login:
            check_path: /login_check
            login_path: /login
            provider: fos_userbundle
            always_use_default_target_path: true
            default_target_path: /dashboard
        logout:
            path:   /logout
            target: /
        anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"

access_control:
    - { path: ^/demo/secured/hello/admin/, roles: ROLE_ADMIN }
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
Run Code Online (Sandbox Code Playgroud)

但后来我不知道在config.yml中设置什么,这是我的config.yml

 imports:
- { resource: parameters.yml }
- { resource: security.yml }

framework:
#esi:             ~
translator:       ~ …
Run Code Online (Sandbox Code Playgroud)

php yaml symfony fosuserbundle

4
推荐指数
1
解决办法
9538
查看次数

FOSUserBundle或PUGXMultiUserBundle有两个不同的用户配置文件(Symfony2)

我怀疑如何解决这个问题:

我的这个问题的Symfony2应用程序有两个不同的配置文件,名为'em"Seller"和"Buyer".目标是保留一堆关于"卖方"的属性,另一方面,关于"买方"(电子邮件和密码会做到这一点)并不多.

我意识到让两个不同的实体登录并使用FOSUserBundle进行注册并不容易.还有一些其他的捆绑包,例如PUGXMultiUserBundle,它们"破解"FOSUserBundle,并且不容易配置/实现.

所以我的问题是:使用黑客PUGXMultiUserBundle建议,处理它的实现和配置是否更正确,或者更好地坚持FOSUserBundle,拥有用户实体,以及与"卖方"的一对一关系代表卖方与买方不同的属性的实体?这种方法会有另一个问题,即注册表格应该分为两部分,用于卖方和买方注册(我不知道是否可以/建议使用FOSUserBundle)

我希望你们帮助我做对.干杯:)

php symfony fosuserbundle pugxmultiuserbundle

4
推荐指数
1
解决办法
1016
查看次数

Symfony2.4 SonataAdminBundle注销错误:您必须在安全防火墙配置中激活注销

登录工作正常.在/ admin/logout获取错误

您必须在安全防火墙配置中激活注销.

in *\vendor\sonata-project\user-bundle\Controller\AdminSecurityController.php at line 98

我将logout设置为true,如下所示:

security.yml:

firewalls:
        main:
            pattern:      .*
            #pattern: ^/
            form-login:
                provider:       fos_userbundle
                csrf_provider:  form.csrf_provider
                login_path:     /login
                use_forward:    false
                check_path:     /login_check
                failure_path:   null
            logout:       true
            anonymous:    true
Run Code Online (Sandbox Code Playgroud)

你如何使用symfony2.4,fosuserbundle1.3和sonata-admin dev-master来避免这个错误?

php symfony fosuserbundle sonata-admin symfony-2.4

4
推荐指数
1
解决办法
7923
查看次数

覆盖FOSUserBundle路由Symfony2

我想覆盖一些来自FOSUserBundle的路线

MyBundle/Resources/config/routing/security.yml

fos_user_security_login:
    path:     /{_locale}/login
    defaults: { _controller: FOSUserBundle:Security:login }
    requirements:
        _locale: %locales%

fos_user_security_check:
    path:     /login_check
    defaults: { _controller: FOSUserBundle:Security:check }
    requirements:
        _locale: %locales%

fos_user_security_logout:
    path:     /{_locale}/logout
    defaults: { _controller: FOSUserBundle:Security:logout }
    requirements:
        _locale: %locales%
Run Code Online (Sandbox Code Playgroud)

但它不起作用,找不到路线

MyBundle/Resources/config/routing/security.xml

<?xml version="1.0" encoding="UTF-8" ?>

<routes xmlns="http://symfony.com/schema/routing"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">

    <route id="fos_user_security_login" pattern="/{_locale}/login">
        <default key="_controller">FOSUserBundle:Security:login</default>
    </route>

    <route id="fos_user_security_check" pattern="/login_check">
        <default key="_controller">FOSUserBundle:Security:check</default>
        <requirement key="_method">POST</requirement>
    </route>

    <route id="fos_user_security_logout" pattern="/{_locale}/logout">
        <default key="_controller">FOSUserBundle:Security:logout</default>
    </route>

</routes>
Run Code Online (Sandbox Code Playgroud)

这有效,但我不知道如何从parameter.yml传递我的locales参数

symfony fosuserbundle

4
推荐指数
1
解决办法
8205
查看次数

在FOSUserBundle中清除组和角色的使用

我目前正在开发一个Symfony2项目.它基于Sonata,使用SonataUserBundle/FOSUserBundle来管理用户.最初的开发工作做得很糟糕,我正在重构很多.

该应用程序定义了三个级别的用户:

  • 管理员
  • 顾问
  • 企业

这些被定义为具有FOSUserBundle的组,并且附加了一堆角色.

现在代码中的每个地方,以前的开发人员都使用(硬编码)组的数据库ID来制作这样的情况:

$userGroup = $em->getRepository('ApplicationSonataUserBundle:Group')->findOneByName($group_name);
$userGroupId = $userGroup->getId();

if ($userGroupId == 1) {
   // Administrator case
   ...
} else if ($userGroupId == 7) {
   // Consultant case
   ...
}
Run Code Online (Sandbox Code Playgroud)

这显然非常糟糕.

我的问题是,我确定如何以一种好的方式重构这一点.
我看到三种可能的方式:

  1. 直接使用定义的角色:ROLE_ADMIN,ROLE_CONSULTANT,ROLE_BUSINESS;

  2. 仍然使用组,但有一些常量与组名称,以避免在整个地方重复它们;

  3. 在FOSUserBundle之上使用多用户系统.我很快回顾了RollerworksMultiUserBundlePUGXMultiUserBundle.虽然我不知道这是不是有点开销,因为我的用户实际上共享相同的信息.

如果你们能指出我正确的方向,那将非常感激.也许有一种完全正确的方法来实现这一点.

symfony fosuserbundle sonata-user-bundle

4
推荐指数
1
解决办法
112
查看次数

无法自动服务FOSUserBundle,Symfony 3.4

我正在尝试覆盖我的FOSUserBundle的注册控制器.我按照https://symfony.com/doc/3.4/bundles/inheritance.html上的步骤操作但是我收到以下错误:

不能自动装配服务 "的appbundle \控制器\这个RegistrationController":方法的参数 "$ formFactory" "FOS\UserBundle \控制器\这个RegistrationController :: __结构()" 引用接口 "FOS\UserBundle \表格\厂\ FactoryInterface",但没有这样的服务存在.您应该将此接口别名为其中一个现有服务:"fos_user.profile.form.factory","fos_user.registration.form.factory","fos_user.change_password.form.factory","fos_user.resetting.form".厂".

我的RegistrationController.php:

// src/UserBundle/Controller/RegistrationController.php
namespace AppBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;
use Symfony\Component\HttpFoundation\Request;

    class RegistrationController extends BaseController
    {
        public function registerAction(Request $request)
        {
            $response = parent::registerAction($request);

            // ... do custom stuff
            return $response;
        }
     }
Run Code Online (Sandbox Code Playgroud)

我的AppBundle.php

<?php

namespace AppBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}
Run Code Online (Sandbox Code Playgroud)

如果需要更多信息,请告诉我,以便我可以更新此问题.

autowired symfony fosuserbundle symfony-3.4

4
推荐指数
1
解决办法
2467
查看次数