Php 允许用户在sonata中仅编辑其姓名

Php 允许用户在sonata中仅编辑其姓名,php,symfony,sonata-admin,Php,Symfony,Sonata Admin,我想允许一些用户添加新闻,但我也不希望他们编辑彼此的新闻。因此登录到管理面板后,他们应该只能看到自己的新闻。我现在正在用奏鸣曲做这件事 这有什么配置吗 My service.yml: services: sonata.admin.news: class: MyBundle\Admin\NewsAdmin tags: - { name: sonata.admin, manager_type: orm, group: "Content"

我想允许一些用户添加新闻,但我也不希望他们编辑彼此的新闻。因此登录到管理面板后,他们应该只能看到自己的新闻。我现在正在用奏鸣曲做这件事

这有什么配置吗

My service.yml:

services:
    sonata.admin.news:
        class: MyBundle\Admin\NewsAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Content", label: "News" }
        arguments:
            - ~
            - MyBundle\Entity\News
            - ~
            - "@doctrine.orm.entity_manager"
        calls:
            - [ setTranslationDomain, [MyBundle]]

NewsAdmin包含常规内容,因此没有必要将其放在这里。

您可以将安全上下文服务注入到NewsAdmin中

class NewsAdmin extends Admin
{
    protected $security;
    protected $em;

    public function __construct($code, $class, $baseControllerName, $entityManager, SecurityContext $security)
    {
        parent::__construct($code, $class, $baseControllerName);

        $this->em = $entityManager;
        $this->security = $security;
    }

    public function getNewInstance()
    {
        $news = parent::getNewInstance();
        $news->setUser($this->security->getToken()->getUser());

        return $formDefinition;
    }

    public function createQuery($context = 'list')
    {
        $queryBuilder = $this->getModelManager()->getEntityManager($this->getClass())->createQueryBuilder();

        $queryBuilder
            ->select('news')
            ->from($this->getClass(), 'news')
            ->andWhere('news.user = :user')
            ->setParameter(':user', $this->security->getToken()->getUser());

        $proxyQuery = new ProxyQuery($queryBuilder);
        return $proxyQuery;
    }
在您的管理定义中:

services:
    sonata.admin.news:
        class: MyBundle\Admin\NewsAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Content", label: "News" }
        arguments:
            - ~
            - MyBundle\Entity\News
            - ~
            - "@doctrine.orm.entity_manager"
            - "@security.context"
        calls:
            - [ setTranslationDomain, [MyBundle]]