質問 > 管理機能 > 商品登録画面でログインメンバーによって制限をつけたい |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ゲスト |
投稿日時: 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
|
ゲスト |
投稿日時: 2016/6/14 18:46
対応状況: 確認中
|
Re: 商品登録画面でログインメンバーによって制限をつけたい 引用:
画面表示の部分であっても、formでやるほうが良いのでしょうか?その辺あまりわからず・・・ 対象のメンバーの判別もform側でwhereを用いて行うということでしょうか? 引用:
こちらはsrc\Eccube\Form\Type\Admin\ProductType.php こちらのカテゴリの部分をカスタマイズすればよいのでしょうか? 該当箇所を参考に見てみて自分の中での認識としては 引用:
ここのadd()内部にquery_builderを入れるということかな? と思いましたが認識はあっているでしょうか? |
|
DELIGHT |
投稿日時: 2016/6/14 18:55
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: 商品登録画面でログインメンバーによって制限をつけたい 引用:
画面表示の部分であっても、formでやるほうが良いのでしょうか?その辺あまりわからず・・・ 原則論ではありますが、ビジネスロジックをViewに持たせるのは違和感がありますし、 恐らくtwigだけでは対応できないためjavascript等に頼る必要があります。 引用: こちらはsrc\Eccube\Form\Type\Admin\ProductType.php その認識で合っています。 本番サイトを直接カスタマイズしているとかでなければ、間違っていても大したことはありません。 まずは手を動かして、間違っていればその間違いも一緒に覚えましょう。
|
ゲスト |
投稿日時: 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を使えばいいのでは。
|
ゲスト |
投稿日時: 2016/6/15 11:31
対応状況: −−−
|
Re: 商品登録画面でログインメンバーによって制限をつけたい 引用:
formでも上記のような書き方できましたっけ? twigではできるかと思っているのですが 自分の書き方がダメだったのか、HTTPの500エラーっとなってしまい・・・ 条件文を0かそれ以外として組んだ際には最後のところに {% endif %}をつける以下の形で大丈夫ですよね?
|
|
DELIGHT |
投稿日時: 2016/6/15 11:49
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: 商品登録画面でログインメンバーによって制限をつけたい 3つ前のレスポンスを見て、Form(PHP)での対応は諦めてtwig側で対応するものと勘違いしました。
Form側なら上記のような書き方になるのではないでしょうか。 MemberもAuthorityも全てエンティティですから、詳しくはEccube\Entity以下を参照して下さい。
|
ゲスト |
投稿日時: 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 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |