バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
aozora
投稿日時: 2013/7/16 14:39
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
お世話になっております。何卒宜しくお願い致します。

各店舗オーナーが他の店舗オーナーの商品を編集・削除等できなくしたいと考えての質問です。(店舗オーナー権限では、管理者画面・商品管理・商品マスターで各店舗オーナー自らが登録した商品だけしか検索できないようにしたい)

以前同等の質問をさせて頂きましたが質問自体が脱線してしまいましたので大変恐縮ですが再度投稿させていただきます。

“管理者画面・商品マスターに店舗オーナーがログインした場合、その時点でログインしている店舗オーナーのmember_id(dtb_memberのmember_id)が、その店舗オーナー自らが登録した商品のcreator_id(dtb_productsのcreator_id)と同じ商品のみを表示する。システム管理者がログインした場合は全ての商品を表示する。”

という意味合いで以下の記述をいたしましたが、ヒント・アドバイス等を頂けませんでしょうか。
SC_Product.php内function alldtlSQLの末尾付近に******内の記述を追加。(dtb_memberの結合とWHERE句)

LEFT JOIN dtb_maker
ON dtb_products.maker_id = dtb_maker.maker_id

************        
LEFT JOIN dtb_member
ON dtb_products.creator_id = dtb_member.member_id

If (dtb_member.authority == 1)
{WHERE dtb_products.creator_id = dtb_member.member_id AND dtb_member.login_date = current_date;}
else {WHERE dtb_products.creator_id = dtb_member.member_id;}
************

) AS alldtl __EOS__; return $sql;}

[EC-CUBE]2.12.1
[データベース] MySQL
[WEBサーバ] Apache
[OS] XP 
[PHP] PHP 5.2.17
yuh
投稿日時: 2013/7/16 19:56
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
SC_Product.php内function alldtlSQLの末尾付近に******内の記述を追加。(dtb_memberの結合とWHERE句)

LEFT JOIN dtb_maker
ON dtb_products.maker_id = dtb_maker.maker_id

************        
LEFT JOIN dtb_member
ON dtb_products.creator_id = dtb_member.member_id

If (dtb_member.authority == 1) 
{WHERE dtb_products.creator_id = dtb_member.member_id AND dtb_member.login_date = current_date;}
else {WHERE dtb_products.creator_id = dtb_member.member_id;}
************

) AS alldtl __EOS__; return $sql;}

このコードを記述して動くんでしょうか?



あと、
dtb_member.login_date = current_date;

この部分で日付が変わる時には表示されなくなると思うんですが、実装するのであれば、
dtb_member.login_date > DATE_ADD(NOW(),INTERVAL 1 MIN)

とかで少しマージン取っておいた方がいいと思います。
aozora
投稿日時: 2013/7/17 17:53
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
yuh様

お世話になっております。ご多忙の中ご返信頂きまして感謝致します。

最初の記述でも動いておりませんでした。頂きました記述変更後のエラー(data/logs/error.log)の抜粋は以下の様になっております。

DB処理でエラーが発生しました。
SQL:
MDB2 Error: syntax error
_doQuery: [Error message: Could not execute statement]

LEFT JOIN dtb_member ON dtb_products.creator_id = dtb_member.member_id WHERE dtb_member.login_date > DATE_ADD(NOW(),INTERVAL 1 MIN) ) AS alldtl WHERE del_flg = 0 ORDER BY update_date DESC LIMIT 0, 10']
[Native code: 1064]
[Native message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MIN) ) AS alldtl WHERE del_flg = 0 ORDER BY update_date DES' at line 1]
on [/var/www/vhosts/xxx/httpdocs/data/class/SC_Query.php(1016)] from


*以下の記述方法の問題点を何かお分かりになりますでしょうか。

If (dtb_member.authority == 1)
{WHERE dtb_products.creator_id = dtb_member.member_id AND dtb_member.login_date > DATE_ADD(NOW(),INTERVAL 1 MIN);}
else {WHERE dtb_products.creator_id = dtb_member.member_id;}

*因みに以下であればシステム管理者・店舗オーナーの両権限で全商品を表示いたします。

LEFT JOIN dtb_member
ON dtb_products.creator_id = dtb_member.member_id
WHERE dtb_products.creator_id = dtb_member.member_id
yuh
投稿日時: 2013/7/18 1:35
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
そもそもその部分のクエリ内で
If (dtb_member.authority == 1)

IFでするのが問題と思います。
その部分の処理は現在ログインしているメンバー情報を別に引っ張ってきて、それに応じてクエリを切り替える処理にしたほうがいいんじゃないでしょうか?
aozora
投稿日時: 2013/7/22 7:14
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
yuh様

お世話になっております。ご教授頂きまして感謝致します。

メンバーの権限によってクエリを切り替える目的で、SC_Products.phpのfunction alldtlSQLを変更する処理を下記の様にLC_Page_Admin_Products.phpのfunction findProductsにて記述いたしました。下記の記述(***********の内側)
につきまして、問題点をご指摘頂けませんでしょうか。あるいは上記の目的達成のためには他の方法にした方が宜しいのでしょうか。

function findProducts($where, $arrValues, $limit, $offset, $order, &$objProduct,) {
$objQuery =& SC_Query_Ex::getSingletonInstance();

// 読み込む列とテーブルの指定
$col = 'product_id, name, authority, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date';

**********************
$objProduct = new SC_Product_Ex();
if ($val['dtb_member.authority'] == 0){
$from = $objProduct->alldtlSQL($where_products_class = '');}
else{
$from = $objProduct->alldtlSQL2($where_products_class = '') ;}
**********************

return $objQuery->select($col, $from, $where, $arrValues);
}
yuh
投稿日時: 2013/7/22 13:44
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
$val['dtb_member.authority'] == 0

の$valがどこからも渡されてないです。

たしか$_SESSION['member_id']だったと思うので、それを使って権限をDBから確認した上で権限によってwhereにそのユーザーのみの処理を加える形でいけると思います。
aozora
投稿日時: 2013/7/23 18:04
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
yuh様

お世話になっております。ご多忙の中恐縮でございます。

何とか機能している状態になったと思われます。
的確なご教授を頂きまして感謝しております。

本当にありがとうございます。
aozora
投稿日時: 2013/7/24 19:58
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
yuh様

お世話になっております。

すみません。問題がありまして、長くて申し訳ございませんが、何かお分かりになりますでしょうか。

商品検索クエリ(alldtlSQL)のWhere句を”最も最近ログインしたメンバーのmember_id(dtb_member)と同じcreator_id(dtb_products)の登録商品を表示する”という記述にしたところ、

例えば、メンバーA,Bが数秒違いで違う画面からログインし、最初にログインしたAが検索するとAの登録商品を表示し、数秒遅れでログインしたBが検索するとBの登録商品を表示しますが、

その後Aが(Bがログイン後)同じ画面で再度「この条件で検索するボタン」を押す、あるいはURLを更新すると、(Aのログイン画面であるにもかかわらず、他の画面からログインされ、最も最近ログインしたメンバーのmember_idであるBのmember_idへとサーバーの情報が更新されてしっており)先ほどまでAの登録商品を表示していたAのログイン画面でBの登録商品を表示してしまいます。

という現象が、A,Bが同じ種類のブラウザからログインした際に発生し、違う種類のブラウザからログインした際は発生していない模様です。

Where句の条件設定に問題があるのでしょうか。あると致しましてもこの場合何らかの対処法(where句に付加的に何らかの条件を設定するような)はありますでしょうか。
yuh
投稿日時: 2013/7/24 22:41
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
前に書いたと思いますが、
$_SESSION['member_id']

で現在ログインしているメンバーのIDが取れます。
そのIDで抽出をかけるようにすればいいと思うので、
特に最近ログインしたメンバーという縛りは必要ないかと思います。
aozora
投稿日時: 2013/7/25 16:28
対応状況: −−−
常連
登録日: 2013/3/21
居住地:
投稿: 40
Re: 商品マスターで店舗オーナーは自らが登録した商品だけしか検索できないようにしたい
yuh様

お世話になっております。ご多忙の中恐縮でございます。
基本以下の様な記述にしておりますが、“前回のスレッドと全く同じ現象”が発生しております。
何か抜けていますでしょうか。

$member_id = $_SESSION['member_id'];
**************
**************
WHERE dtb_products.creator_id = $member_id
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,066名です
総投稿数は110,021件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
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.