EC-CUBE4の管理画面にログインしたら自分が登録した商品しか商品一覧に表示されないようにする方法です。
まずCusotomizeディレクトリ内にRepositoryディレクトリを設置してください。
次に以下のようにAdminProductListByMenberCustomizer.phpを作成してRepository内に設置してください。
<?php
namespace Customize\Repository;
use Eccube\Doctrine\Query\WhereCustomizer;
use Eccube\Doctrine\Query\WhereClause;
use Eccube\Repository\QueryKey;
use Eccube\Entity\Member;
use Eccube\Entity\Master\Authority;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* Description of AdminProductListByMenberCustomizer
*
* @author Akira Kurozumi <info@a-zumi.net>
*/
class AdminProductListByMenberCustomizer extends WhereCustomizer {
/**
* @var TokenStorageInterface
*/
protected $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
protected function createStatements($params, $queryKey)
{
if (null !== $token = $this->tokenStorage->getToken()) {
// ユーザーがメンバーの場合
if($token->getUser() instanceof Member) {
// メンバーが管理者ではない場合
if($token->getUser()->getAuthority()->getId() != Authority::ADMIN) {
return [WhereClause::eq('p.Creator', ':creator_id', ['creator_id' => $token->getUser()])];
}
}
}
return [];
}
public function getQueryKey(): string
{
return QueryKey::PRODUCT_SEARCH_ADMIN;
}
}
以上で完成です。
これで他のメンバーが登録した商品は管理画面の商品一覧に表示されなくなります。
管理者はすべて商品が表示されます。
