1

几天以来,我一直在尝试找出如何要求easyadmin存储author_id(或user_id具体而言),但我自己找不到。

基本上,通过使用createListQueryBuilder特定控制器中的函数来覆盖easyadmin控制器,我找到了为每个登录用户显示他们创建的文章的方法。

现在我被锁定了好几天,因为我不知道如何告诉 easyadmin 存储当前记录的author_id(或 user_id),解决方案是获取 author_id没关系,但是在坚持之前$this->getUser()->getId()我可以在哪里或如何将它与我的链接author_id它到数据库

现在,如果我在作者下方使用此代码,则可以手动添加其 author_id 但这不安全:

{ property: 'user', type: 'entity', type_options: { class: 'AppBundle\Entity\User' ,multiple: false,expanded: true} }

我想使用隐藏的输入或任何其他可能更安全的方式

谢谢任何人都可以帮助我

编辑:找到解决方案真是太麻烦了,但我终于找到了仅显示当前登录用户(如果您愿意,可以是基本管理员或贡献者)或数据库中注册用户的完整列表(如果当前登录用户)的方法作为特定角色(在本例中为网站主管理员)

这是解决方案:

<?php

namespace AppBundle\Controller;

use AppBundle\Entity\User;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Controller\Annotations\Route;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use AlterPHP\EasyAdminExtensionBundle\EasyAdminExtensionBundle;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
/**
 * Article controller.
 *
 * @Route("articles")
 */
class ArticlesController extends BaseAdminController 
{
    /**
     * @Route("/", name="easyadmin")
     */
    public function indexAction(Request $request)
    {
        return parent::indexAction($request);
    }
    public function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null)
    {
        if(!$this->getUser()->hasRole('ROLE_DIRECTION_ADMIN'))
            {

                $response =  parent::createListQueryBuilder('Articles', $sortDirection, $sortField, $dqlFilter); // TODO: Change the autogenerated stub
            $response->where('entity.userId = :userId')->setParameter('userId', $this->getUser()->getId());
            return $response;
            }
            $response =  parent::createListQueryBuilder('Articles', $sortDirection, $sortField, $dqlFilter); // TODO: Change the autogenerated stub

            return $response;
    }
    public function createEntityFormBuilder($entity, $view)
    {
        $formBuilder = parent::createEntityFormBuilder($entity, $view);

        // Here I overwrite field to be disabled
        if(!$this->getUser()->hasRole('ROLE_DIRECTION_ADMIN'))
        {
            $formBuilder->add('user', EntityType::class, array(
                'class' => 'AppBundle:User',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                    ->where('u.id = :id')->setParameter('id',$this->getUser()->getId());
                },
            ));
            return $formBuilder;
        }
        $formBuilder->add('user', EntityType::class, array(
            'class' => 'AppBundle:User',
            'query_builder' => function (EntityRepository $er) {
                return $er->createQueryBuilder('u')
                    ->orderBy('u.username', 'asc');
            },
        ));


        return $formBuilder;
    }


}

1/我创建了一个自定义的 ArticlesController 并添加了 1 个方法来显示登录的用户文章列表,如果他们有低级别的角色,如果用户角色是高的,则显示所有网站文章

2/ 我创建了第二种方法,如果用户具有低级别角色(例如贡献者),则将当前登录的 user_id 字段添加到 easyadmin 表单构建器,或者如果当前登录的用户是网站主管理员,则提供完整的用户列表

4

0 回答 0