gpt4 book ai didi

symfony - 用户类型 SonataUserBundle + FOSUserBundle + SonataAdminBundle

转载 作者:行者123 更新时间:2023-12-01 05:19:35 24 4
gpt4 key购买 nike

我正在尝试在我的项目中创建 3 个用户:

  • 客户 :谁将访问前端并具有字段“姓名”、“CPF”、“地址”。
  • 供应商 :谁将在网站上注册优惠并具有“电话”、“CNPJ”字段
  • 管理员 :谁将管理所有客户、供应商、优惠等...

  • 所以..我为此安装了 3 个包:SonataUserBundle + FosUserBundle + SonataAdminBundle
    我遵循了每个教程的整个教程。但我不知道如何创建每种类型的用户。

    我正在使用 ApplicationSonataUserBundle 生成实体用户和组。

    这是我的代码:
    namespace Sete\UserBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;
    use Application\Sonata\UserBundle\Entity\User as BaseUser;

    /**
    * Cliente
    *
    * @ORM\Table(name="cliente")
    * @ORM\Entity
    *
    */
    class Cliente extends BaseUser
    {

    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

    ...another fields...
    }

    和供应商:
    namespace Sete\UserBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;
    use Doctrine\Common\Collections\ArrayCollection;
    use Application\Sonata\UserBundle\Entity\User as BaseUser;

    /**
    * Vendedor
    *
    * @ORM\Table(name="vendedor")
    * @ORM\Entity
    */
    class Vendedor extends BaseUser
    {

    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

    ...another fields...
    }

    应用内核.php

            ...
    new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'),
    new Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(),
    new Application\Sonata\UserBundle\ApplicationSonataUserBundle()


    和 config.yml
    ...
    fos_user:
    db_driver: orm # can be orm or odm
    firewall_name: main
    user_class: Application\Sonata\UserBundle\Entity\User
    group:
    group_class: Application\Sonata\UserBundle\Entity\Group

    sonata_user:
    manager_type: orm # can be orm or mongodb
    ...

    通过这种方式,我的实体 Cliente 和 Vendedor 与组没有关联。我尝试添加 $groups 关系,但不起作用。因此,当我尝试管理此实体时,出现错误:

    An exception occurred while executing 'SELECT count(DISTINCT c0_.id) AS sclr0 FROM cliente c0_ LEFT JOIN fos_user_user_group f3_ ON f2_.id = f3_.user_id LEFT JOIN fos_user_group f1_ ON f1_.id = f3_.group_id':

    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'f2_.id' in 'on clause'



    这是创建用户类型的最佳实践吗?或者,不是扩展 ApplicationUserBundle:User,而是创建 Cliente 和 Vendedor 实体(没有扩展 ApplicationUserBundle:User),然后创建与 User 的关系(将字段 $cliente 和 $vendor 放在 User 实体中并建立关系)?

    对不起英语。
    我整个星期都在尝试这样做。按照很多教程,但没有得到答案。

    谢谢所有。

    最佳答案

    拥有多种用户类型的一种方法是使用 Doctrine inheritance mapping .

    但是,我建议将单用户类型与角色安全处理程序一起使用。您应该使用 Easy Extends ( installation instructions ) 安装 SonataUserBundle,这样您就可以不修改 SonataUserBundle。您应该将所有需要的字段添加到 App\UserBundle\Entity\User 并创建三个用户组:客户、供应商和管理员。在您的主 config.yml 中,添加两个缺少的角色(已经有 ROLE_ADMIN):

    ROLE_SUPER_ADMIN:       [<...>, ROLE_CLIENT, ROLE_VENDOR]

    为这三个用户组分配您创建的适当权限。

    现在,在 User 中,使自定义 fieds 可以为空,并且在 UserAdmin 中仅显示 fieds 用户类型可以使用安全权限查看。例子:
    if ($this->isGranted('ROLE_CLIENT')) {
    $formMapper->add('cpf');
    }

    关于symfony - 用户类型 SonataUserBundle + FOSUserBundle + SonataAdminBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17507020/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com