バージョン選択

フォーラム

メニュー

オンライン状況

48 人のユーザが現在オンラインです。 (33 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 47
jamshedali もっと...

サイト内検索

質問 > 管理機能 > 商品登録画面でログインメンバーによって制限をつけたい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2016/6/14 15:13
対応状況: 開発中
商品登録画面でログインメンバーによって制限をつけたい
商品登録画面においてログインしているメンバーに応じて、制限をつけたいということなのですが具体的に申し上げると

登録しているメンバーを例として以下のように仮定します。
?マスタ管理者(すべての権限あり)
?食器販売チーム(商品の登録・在庫の更新などは食器のカテゴリに限定)
?インテリア販売チーム(食器販売チーム同様、更新可能なのはインテリアのカテゴリに限定)

初期のままでは、すべてのメンバーにすべての商品カテゴリの情報が更新できてしまうかと思います。

今、考えているのはひとまず段階として商品の追加が他カテゴリにできないようにするということです。

product.twigにて、ヘッダーのログインしているメンバー名が表示されている部分の情報から判断しそれぞれのカテゴリにのみしか追加できないようにしようと考えています。

ifで条件分岐(条件としてはapp.userでユーザの情報が載っていると思うのでこれを使用できるのかなと思います)させ、この情報の場合にこのカテゴリを固定表示させるという形です。

デフォルトではセレクトボックスになるかと思いますが、そこを変更したいと考えています。

app.user中身
Member {#1378 ▼
-id: 4
-name: "食器販売チーム"
-department: "食器販売チーム"
-login_id: "Dinnerware"
-password: "-----------------------------------------------"
-salt: "------------------"
-Authority: Authority {#1390 ▶}
-rank: 3
-Work: Work {#1350 ▶}
-del_flg: 0
-Creator: Member {#1419 ▶}
-create_date: DateTime {#1367 ▶}
-update_date: DateTime {#1377 ▶}
-login_date: DateTime {#1358 ▶}
}

form.Categoryの中身
FormView {#2545 ▼
+vars: array:41 [▼
"value" => []
"attr" => []
"form" => FormView {#2545}
"id" => "admin_product_Category"
"name" => "Category"
"full_name" => "admin_product[Category][]"
"disabled" => false
"label" => "商品カテゴリ"
"label_format" => null
"multipart" => false
"block_prefixes" => array:6 [▶]
"unique_block_prefix" => "_admin_product_Category"
"translation_domain" => null
"cache_key" => "_admin_product_Category_category"
"read_only" => false
"errors" => FormErrorIterator {#2544 ▶}
"valid" => true
"data" => []
"required" => false
"max_length" => null
"pattern" => null
"size" => null
"label_attr" => []
"compound" => false
"method" => "POST"
"action" => ""
"submitted" => false
"help" => null
"freeze" => false
"freeze_display_text" => true
"multiple" => true
"expanded" => false
"preferred_choices" => []
"choices" => array:3 [▶]
"separator" => "-------------------"
"placeholder" => null
"choice_translation_domain" => false
"is_selected" => Closure {#2547 ▶}
"placeholder_in_choices" => false
"empty_value" => null
"empty_value_in_choices" => false
]
+parent: FormView {#2459 ▼
+vars: array:30 [▶]
+parent: null
+children: array:16 [▶]
-rendered: false
}
+children: []
-rendered: false
}


固定表示はどのように実装できるのでしょうか?
ゲスト
投稿日時: 2016/6/14 16:06
対応状況: 開発中
Re: 商品登録画面でログインメンバーによって制限をつけたい
条件分岐としてはそのまま

※実際はnameでなくidにする予定です

{% if app.user.name == '食器販売チーム' %}
(ここに固定表示の処理を埋め込む)
{% elseif app.user.name == 'インテリア販売チーム' %}
(ここに固定表示の処理を埋め込む)
{% else %}
(管理者の場合はすべて操作できるためデフォルトを残しておきます)
{% endif %}

このように作成しております。
DELIGHT
投稿日時: 2016/6/14 17:28
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: 商品登録画面でログインメンバーによって制限をつけたい
フォームのことは基本的にEccube\Form以下で行なうのがいいでしょう。

この場合は、FormBuilder::add($child, $type, $options)の$optionsにquery_builderというオプションが用意されています。
http://symfony.com/doc/current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities

下記の辺りを参考に、$app['user']でWHEREを設定するといいと思います。
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Form/Type/Admin/ProductType.php#L74
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Form/Type/ShippingMultipleItemType.php#L75


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

ゲスト
投稿日時: 2016/6/14 18:46
対応状況: 確認中
Re: 商品登録画面でログインメンバーによって制限をつけたい
引用:

フォームのことは基本的にEccube\Form以下で行なうのがいいでしょう。


画面表示の部分であっても、formでやるほうが良いのでしょうか?その辺あまりわからず・・・
対象のメンバーの判別もform側でwhereを用いて行うということでしょうか?

引用:

この場合は、FormBuilder::add($child, $type, $options)の$optionsにquery_builderというオプションが用意されています。
http://symfony.com/doc/current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities

下記の辺りを参考に、$app['user']でWHEREを設定するといいと思います。
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Form/Type/Admin/ProductType.php#L74
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Form/Type/ShippingMultipleItemType.php#L75


こちらはsrc\Eccube\Form\Type\Admin\ProductType.php
こちらのカテゴリの部分をカスタマイズすればよいのでしょうか?
該当箇所を参考に見てみて自分の中での認識としては

引用:

->add('Category', 'category', array(
'label' => '商品カテゴリ',
'multiple' => true,
'mapped' => false,
))

ここのadd()内部にquery_builderを入れるということかな?
と思いましたが認識はあっているでしょうか?
DELIGHT
投稿日時: 2016/6/14 18:55
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: 商品登録画面でログインメンバーによって制限をつけたい
引用:
画面表示の部分であっても、formでやるほうが良いのでしょうか?その辺あまりわからず・・・
対象のメンバーの判別もform側でwhereを用いて行うということでしょうか?

原則論ではありますが、ビジネスロジックをViewに持たせるのは違和感がありますし、
恐らくtwigだけでは対応できないためjavascript等に頼る必要があります。

引用:
こちらはsrc\Eccube\Form\Type\Admin\ProductType.php
こちらのカテゴリの部分をカスタマイズすればよいのでしょうか?
該当箇所を参考に見てみて自分の中での認識としては
->add('Category', 'category', array(
'label' => '商品カテゴリ',
'multiple' => true,
'mapped' => false,
))
ここのadd()内部にquery_builderを入れるということかな?
と思いましたが認識はあっているでしょうか?

その認識で合っています。
本番サイトを直接カスタマイズしているとかでなければ、間違っていても大したことはありません。
まずは手を動かして、間違っていればその間違いも一緒に覚えましょう。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

ゲスト
投稿日時: 2016/6/15 10:12
対応状況: 開発中
Re: 商品登録画面でログインメンバーによって制限をつけたい
現在、条件分岐は完成しているのですが現時点では以下となり
ログインユーザ名での分岐となっています

if ($app[user] == システム管理者) {
・・・
}

これでも対応はできるのですが
権限によって変える方が後々の増加対応時などにも影響範囲が少ないかと思っていますが
権限のIDは
Authorityのidかと思っていますがその部分を取得させるにはどのようにすればよいか詰まってしまっております。

どなたか分かる方がいましたらご教示いただければと思います。

$app['user']でdumpさせた場合に
Member {#645 ▼
-id: 2
-name: "管理者"
-department: "EC-CUBE SHOP"
-login_id: "ecadmin"
-password: "-----------------------------------------"
-salt: "----------------------------------------"
-Authority: Authority {#585 ▼
+__isInitialized__: false
-id: "0"
-name: null
-rank: null
…2
}
・・・

上記が出ているのですが、このAuthorityのidが使えれば一番便利なのかなと思いまして・・・
DELIGHT
投稿日時: 2016/6/15 11:00
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: 商品登録画面でログインメンバーによって制限をつけたい
appのuserのAuthorityのidを使えばいいのでは。
{% if app.user.Authority.id == 0%}


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

ゲスト
投稿日時: 2016/6/15 11:31
対応状況: −−−
Re: 商品登録画面でログインメンバーによって制限をつけたい
引用:

appのuserのAuthorityのidを使えばいいのでは。
{% if app.user.Authority.id == 0%}


formでも上記のような書き方できましたっけ?
twigではできるかと思っているのですが

自分の書き方がダメだったのか、HTTPの500エラーっとなってしまい・・・

条件文を0かそれ以外として組んだ際には最後のところに
{% endif %}をつける以下の形で大丈夫ですよね?


{% if app.user.Authority.id == 0%}
・・・
{% else %}
・・・
{% endif %}
DELIGHT
投稿日時: 2016/6/15 11:49
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: 商品登録画面でログインメンバーによって制限をつけたい
3つ前のレスポンスを見て、Form(PHP)での対応は諦めてtwig側で対応するものと勘違いしました。

if ($app['user']->getAuthority()->getId() == 0) {

Form側なら上記のような書き方になるのではないでしょうか。

MemberもAuthorityも全てエンティティですから、詳しくはEccube\Entity以下を参照して下さい。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

ゲスト
投稿日時: 2016/6/15 14:59
対応状況: 開発中
Re: 商品登録画面でログインメンバーによって制限をつけたい
DELIGHT様、いつもご回答ありがとうございます。
上記内容非常にわかりやすくありがとうございました。

また、上記でquery_builderを使用するのはどうでしょうか?というご提案がありquery_builderについて調べていましたが、詰まってしまう部分がありましたのでわかる方いましたらお願いいたします。

http://symfony.com/doc/current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities

https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Form/Type/ShippingMultipleItemType.php#L75</blockquote></div>

これらを参考にしているのですが、query_builderで

'query_builder' => function (EntityRepository $er) use ($Customer) {
return $er->createQueryBuilder('ca')
    ->where('ca.Customer = :Customer')
    ->orderBy("ca.id", "ASC")
    ->setParameter('Customer', $Customer);
},

このようになっている場合、functionの後ろには何を記載しているのでしょうか?
createQueryBuilderを呼び出しているため
vendor\doctrine\orm\lib\Doctrine\ORMの
クラスを記載しているものと思いますが

createQueryBuilder自体が
EntityManager.phpとEntityRepository.phpにあるため
どちらを呼び出すのだろうと悩んでしまいました。

また、createQueryBuilderの後ろも''で囲われているもので
ここはテーブルの略称なのかな?と思うのでなんでもいいのかもしれませんがこの2点

ご教示いただけますと幸いです。
よろしくお願いいたします。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,788名です
総投稿数は109,972件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1644
8
red
1570
9
mcontact
1289
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.