LoginSignup
0
2

More than 3 years have passed since last update.

【ECCUBE4】管理メンバーがそれぞれ設定した商品タグしか管理画面に表示されないようにする。【マーケットプレイス化】

Last updated at Posted at 2020-03-29
1 / 8

目的

マーケットプレイス型ECのように、管理メンバーごとの商品管理・受注管理をできるようにカスタマイズしていきます。
主にカスタマイズする場所は下記です。
・商品管理
・受注管理


方針

メンバーに割り当てられているcreator_idを活用します。


今回すること

・管理メンバー毎にそれぞれ設定した商品タグしか表示されないようにします。


管理メンバーがそれぞれ設定した商品タグしか表示されないようにします。


tagにcreator_idを付与

app/Customize/Entity/TagTrait.php
<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;

/**
  * @EntityExtension("Eccube\Entity\Tag")
 */
trait TagTrait
{
    /**
     *  @ORM\Column(type="string", nullable=true)
     */
    public $creator_id;

}

・タグ保存時にcreator_idを付与
・タグ取得時はcreator_idが一致するもののみ取得

app/Customize/Repository/CreatorTagRepository.php
+use Eccube\Entity\AbstractEntity;
+use Eccube\Repository\AbstractRepository;
+use Eccube\Entity\Member;
+use Eccube\Entity\Master\Authority;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;

class TagRepository extends AbstractRepository
  {
-    public function __construct(RegistryInterface $registry)
-    {
+
+    /**
+     * @var TokenStorageInterface
+     */
+    protected $tokenStorage;
+
+    /**
+     * TagRepository constructor.
+     *
+     * @param RegistryInterface $registry
+     * @param TokenStorageInterface $tokenStorage
+     * @param AuthorizationCheckerInterface $authorizationChecker
+     */
+    public function __construct(
+        RegistryInterface $registry,
+        TokenStorageInterface $tokenStorage
+    ) {
         parent::__construct($registry, Tag::class);
+        $this->tokenStorage = $tokenStorage;
     }

・・・
・・・

+        if (null !== $token = $this->tokenStorage->getToken()) {
+            if($token->getUser()->getAuthority()->getId() != Authority::ADMIN) {
+                $tag->creator_id = $token->getUser()->getCreator()->getId();
+            }
+        }
         $em = $this->getEntityManager();
         $em->persist($tag);
         $em->flush($tag);

・・・
・・・

     public function getList()
     {
-        $qb = $this->createQueryBuilder('t')->orderBy('t.sort_no', 'DESC');

-        return $qb->getQuery()->getResult();
+         $qb = $this->createQueryBuilder('t');
+
+         if (null !== $token = $this->tokenStorage->getToken()) {
+             if($token->getUser() instanceof Member) {
+                 if($token->getUser()->getAuthority()->getId() != Authority::ADMIN) {
+                     $qb = $qb
+                         ->andWhere('t.creator_id = :creator_id')
+                         ->setParameter('creator_id', $token->getUser()->getCreator()->getId())
+                         ->orderBy('t.sort_no', 'ASC');
+                 }
+             }
+         }
+
+         return $qb->getQuery()->getResult();
     }


宣伝

ハンドメイド猫グッズ専門ショップを運営しています。
ネコ好きの方、親しい間柄にネコ好きがいらっしゃる方、ぜひご覧ください。
■キャットギフト
https://cat-gift.net/

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2