Перейти к содержанию
Форум поддержки пользователей VamShop

Добавление товаров Пользователем, разграничение прав


Рекомендуемые сообщения

В теме про добавление баннеров в модуль я написал, что делаю каталог фирм и товаров этих же фирм. Потому мне захотелось чтобы фирмы сами добавляли свои товары. Но надо было сделать чтобы один пользователь не видел и, соответственно, не мог удалить товарные позиции другого пользователя. Долго искал какой-нить модуль. Но как оказалось ничего этого не надо. Все делается очень быстро без всяких модулей, правда необходимо покопаться с кодом. Для начала я привязал пользователя к производителю. Добавил в таблицу customers поле manufacturers_id. Потом идем в файл login.php

находим

// Check if email exists
$check_customer_query = vam_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname,
customers_gender, customers_password, customers_email_address, login_tries, login_time, customers_default_address_id from
".TABLE_CUSTOMERS." where customers_email_address = '".vam_db_input($email_address)."' and account_type = '0'");[/code] меняем на // Check if email exists $check_customer_query = vam_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, login_tries, login_time, customers_default_address_id, [color=red]manufacturers_id[/color] from ".TABLE_CUSTOMERS." where customers_email_address = '".vam_db_input($email_address)."' and account_type = '0'"); в запрос добавилось поле manufacturers_id (красненьким выделил). Это нужно чтоп узнать к какому производителю относится пользователь. Теперь, чтобы в любом месте, в любой строчке кода мы могли проверить что за пользователь у нас работает, необходимо завести новую переменную сессии, находим строку $_SESSION['customer_zone_id'] = $check_country['entry_zone_id']; и добавляем $_SESSION['manufacturers_id']=$check_customer['manufacturers_id']; Проделать это надо в двух местах. Так как там есть проверка на капчу. Все, с login.php закончили, теперь надо в logoff.php после unset ($_SESSION['ccard']); добавить unset ($_SESSION['manufacturers_id']); ну вот и все. Дальше каждый может делать под себя. Напишу как сделал я. // Кстати, при добавлении поля manufacturers_id  в таблицу customers я сделал чтобы значение по умолчанию было 0 // При проверке смотрим, если $_SESSION['manufacturers_id']==0 значит это обычный админ/пользователь, если не ноль, // то это пользователь от производителя Теперь сделаем чтобы при добавлении пользователя-производителя администратором из админки ему приписывалось manufacturer_id идем в admin/create_account.php находим $entry_zone_id = vam_db_prepare_input($_POST['entry_zone_id']); (64 строка вроде или около этого) и добавляем $manufacturers_id = vam_db_prepare_input($_POST['manufacturers_id']); теперь ищем if ($error == false) { (у меня 292 строка) $sql_data_array = array ('customers_status' => $customers_status_c, 'customers_cid' => $customers_cid, 'customers_vat_id' => $customers_vat_id, 'customers_vat_id_status' => $customers_vat_id_status, 'customers_firstname' => $customers_firstname, 'customers_lastname' => $customers_lastname, 'customers_email_address' => $customers_email_address, 'customers_telephone' => $customers_telephone, 'customers_fax' => $customers_fax, 'payment_unallowed' => $payment_unallowed, 'shipping_unallowed' => $shipping_unallowed, 'customers_password' => $customers_password,'customers_date_added' => 'now()','customers_last_modified' => 'now()', '[color=red]manufacturers_id' => $manufacturers_id[/color]); То что я отметил красным, это надо добавить Потом ищем
[code]if ($error == true) {
if ($entry_email_address_error == true) {
echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"').' '.ENTRY_EMAIL_ADDRESS_ERROR;
}
elseif ($entry_email_address_check_error == true) {
echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"').' '.ENTRY_EMAIL_ADDRESS_CHECK_ERROR;
}
elseif ($entry_email_address_exists == true) {
echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"').' '.ENTRY_EMAIL_ADDRESS_ERROR_EXISTS;
} else {
echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"');
}
} else {
echo vam_draw_input_field('customers_email_address', $customers_email_address, 'maxlength="96"');
}
?></td>
          </tr>
        </table></td>
      </tr>
добавляем
<?php 
$manufacturers_array = array (array ('id' => '', 'text' => TEXT_NONE));
$manufacturers_query = vam_db_query("select manufacturers_id, manufacturers_name from ".TABLE_MANUFACTURERS." order by manufacturers_name");
while ($manufacturers = vam_db_fetch_array($manufacturers_query)) {
        $manufacturers_array[] = array ('id' => $manufacturers['manufacturers_id'], 'text' => $manufacturers['manufacturers_name']);
}
?>




      <tr>
        <td class="formAreaTitle"><?php echo CATEGORY_COMPANY; ?></td>
      </tr>
      <tr>
        <td class="formArea"><table border="0" cellspacing="2" cellpadding="2">
          <tr>
            <td class="main"><?php echo ENTRY_COMPANY; ?></td>
            <td class="main"><?php echo vam_draw_pull_down_menu('manufacturers_id', $manufacturers_array, '0'); ?></td>
          </tr></table>
        </td>
      </tr>[/code] Все. теперь при добавлении пользователя из админки появится поле "Компания:" и там можно будет выбрать производителя. ... Дальше. Я захотел сделать чтобы у админо-пользователей-производителей не отображалось добавить/удалить категорию, а осталась возможность добавлять и редактировать только [b]свои[/b] товары. идем в categories_view.php Находим
[code]//formiruem stroku kol-va

    if ($_GET['search']) {
        $products_query = vam_db_query("
        SELECT
        p.products_tax_class_id,
        p.products_id,
        pd.products_name,
        p.products_sort,
        p.products_quantity,
        p.products_to_xml,
        p.products_image,
        p.products_price,
        p.products_discount_allowed,
        p.products_date_added,
        p.products_last_modified,
        p.products_date_available,
        p.products_status,
        p.products_startpage,
        p.products_startpage_sort,
        p2c.categories_id FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
        WHERE p.products_id = pd.products_id AND pd.language_id = '" . $_SESSION['languages_id'] . "' AND
        p.products_id = p2c.products_id AND (pd.products_name like '%" . $_GET['search'] . "%' OR
        p.products_model = '" . $_GET['search'] . "') ORDER BY " . $prodsort . " limit ".$page.",".$max_count);
    } else {
        $products_query = vam_db_query("
        SELECT
        p.products_tax_class_id,
        p.products_sort,
        p.products_id,
        pd.products_name,
        p.products_quantity,
        p.products_to_xml,
        p.products_image,
        p.products_price,
        p.products_discount_allowed,
        p.products_date_added,
        p.products_last_modified,
        p.products_date_available,
        p.products_status,
        p.products_startpage,
        p.products_startpage_sort FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
        WHERE p.products_id = pd.products_id AND pd.language_id = '" . (int)$_SESSION['languages_id'] . "' AND
        p.products_id = p2c.products_id AND p2c.categories_id = '" . $current_category_id . "' ORDER BY " . $prodsort . " limit ".$page.",".
$max_count);
    }
Меняем на
    if ($_GET['search']) {
        $products_query = vam_db_query("
        SELECT
        p.products_tax_class_id,
        p.products_id,
        pd.products_name,
        p.products_sort,
        p.products_quantity,
        p.products_to_xml,
        p.products_image,
        p.products_price,
        p.products_discount_allowed,
        p.products_date_added,
        p.products_last_modified,
        p.products_date_available,
        p.products_status,
        p.products_startpage,
        p.products_startpage_sort,
        p2c.categories_id FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
        WHERE p.products_id = pd.products_id AND pd.language_id = '" . $_SESSION['languages_id'] . "' AND
        p.products_id = p2c.products_id AND (pd.products_name like '%" . $_GET['search'] . "%' OR
        p.products_model = '" . $_GET['search'] . "') ORDER BY " . $prodsort . " limit ".$page.",".$max_count);
    } else {
    if ($_SESSION['manufacturers_id']==0){ //Если это обычный админ - показываем ему все.
        $products_query = vam_db_query("
        SELECT
        p.products_tax_class_id,
        p.products_sort,
        p.products_id,
        pd.products_name,
        p.products_quantity,
        p.products_to_xml,
        p.products_image,
        p.products_price,
        p.products_discount_allowed,
        p.products_date_added,
        p.products_last_modified,
        p.products_date_available,
        p.products_status,
        p.products_startpage,
        p.products_startpage_sort FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_PRODUCTS_TO_CATEGORIES . " p2c
        WHERE p.products_id = pd.products_id AND pd.language_id = '" . (int)$_SESSION['languages_id'] . "' AND
        p.products_id = p2c.products_id AND p2c.categories_id = '" . $current_category_id . "' ORDER BY " . $prodsort . " limit ".$page.",".
$max_count); }else{  //Если это админопользователь-производитель покажем ему только его товары (с manufacturers_id=
$_SESSION['manufacturers_id'])
        $products_query = vam_db_query("
        SELECT
        p.products_tax_class_id,
        p.products_sort,
        p.products_id,
        pd.products_name,
        p.products_quantity,
        p.products_to_xml,
        p.products_image,
        p.products_price,
        p.products_discount_allowed,
        p.products_date_added,
        p.products_last_modified,
        p.products_date_available,
        p.products_status,
        p.products_startpage,
        p.products_startpage_sort FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
        WHERE p.manufacturers_id=".(int)$_SESSION['manufacturers_id']." AND p.products_id = pd.products_id AND pd.language_id = '" .
(int)$_SESSION['languages_id'] . "' AND
        p.products_id = p2c.products_id AND p2c.categories_id = '" . $current_category_id . "' ORDER BY " . $prodsort . " limit ".$page.",".
$max_count);
        }

    }[/code]

Ссылка на сообщение
Поделиться на другие сайты

дальше уберем все что касается категорий, ищем

//Multi Element Actions
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%;">' . TEXT_MARKED_ELEMENTS . '</div>');
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button"
name="multi_delete" onClick="this.blur();" value="'. BUTTON_DELETE . '"></td></tr><tr><td align="center"><input type="submit"
class="button" onClick="this.blur();" name="multi_move" value="' . BUTTON_MOVE . '"></td></tr><tr><td align="center"><input
type="submit" class="button" onClick="this.blur();" name="multi_copy" value="' . BUTTON_COPY . '"></td></tr></table>');

            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button"
name="multi_status_on" onClick="this.blur();" value="'. BUTTON_STATUS_ON . '"></td></tr><tr><td align="center"><input
type="submit" class="button" onClick="this.blur();" name="multi_status_off" value="' . BUTTON_STATUS_OFF . '"></td></tr></table>');
            $contents[] = array('text'  => '</form>');
            //Single Element Actions
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px
solid Black; margin-top: 5px;">' . TEXT_ACTIVE_ELEMENT . '</div>');
            $contents[] = array('align' => 'center', 'text' => '<a class="button" onClick="this.blur();" href="' . vam_href_link
(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&cID=' . $cInfo-
>categories_id . '&action=edit_category') . '">' . BUTTON_EDIT . '</a>');
            //Insert new Element Actions
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px
solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>');
[/code] меняем на
[code]            //Multi Element Actions
            if ($_SESSION['manufacturers_id']==0){    ///// Все то же самое только добавили проверку на manufacturer_id
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%;">' . TEXT_MARKED_ELEMENTS . '</div>');
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button" name="multi_delete" onClick="this.blur();" value="'. BUTTON_DELETE . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_move" value="' . BUTTON_MOVE . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_copy" value="' . BUTTON_COPY . '"></td></tr></table>');
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><input type="submit" class="button" name="multi_status_on" onClick="this.blur();" value="'. BUTTON_STATUS_ON . '"></td></tr><tr><td align="center"><input type="submit" class="button" onClick="this.blur();" name="multi_status_off" value="' . BUTTON_STATUS_OFF . '"></td></tr></table>');
            $contents[] = array('text'  => '</form>');
            //Single Element Actions
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_ACTIVE_ELEMENT . '</div>');
            $contents[] = array('align' => 'center', 'text' => '<a class="button" onClick="this.blur();" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&cID=' . $cInfo->categories_id . '&action=edit_category') . '">' . BUTTON_EDIT . '</a>');
            //Insert new Element Actions
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>');
            }
после этого блока вместо
            if (!$_GET['search']) {
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            }[/code] пишем
[code]            if (!$_GET['search']) {
            if ($_SESSION['manufacturers_id']==0){  /////Max
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            } else {
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            }

            }
далее ищем
  //Insert new Element Actions
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>');
            if (!$_GET['search']) {
                      $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            }[/code] меняем на
[code]  //Insert new Element Actions
            $contents[] = array('align' => 'center', 'text' => '<div style="padding-top: 5px; font-weight: bold; width: 90%; border-top: 1px solid Black; margin-top: 5px;">' . TEXT_INSERT_ELEMENT . '</div>');
            if (!$_GET['search']) {
            if ($_SESSION['manufacturers_id']==0){  /////Max
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            } else {
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            }
            }
ну и наконец, ищем
        } else {
          // create category/product info
          $heading[] = array('text' => '<b>' . EMPTY_CATEGORY . '</b>');
          $contents[] = array('text' => sprintf(TEXT_NO_CHILD_CATEGORIES_OR_PRODUCTS, vam_get_categories_name($current_category_id, $_SESSION['languages_id'])));
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
        }[/code] меняем на
[code]        } else {
          // create category/product info
          $heading[] = array('text' => '<b>' . EMPTY_CATEGORY . '</b>');
          $contents[] = array('text' => sprintf(TEXT_NO_CHILD_CATEGORIES_OR_PRODUCTS, vam_get_categories_name($current_category_id, $_SESSION['languages_id'])));
            if ($_SESSION['manufacturers_id']==0){  /////Max
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_category') . '">' . BUTTON_NEW_CATEGORIES . '</a></td></tr><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            } else {
            $contents[] = array('align' => 'center', 'text' => '<table border=0><tr><td align="center"><a class="button" onClick="this.blur()" href="' . vam_href_link(FILENAME_CATEGORIES, vam_get_all_get_params(array('cPath', 'action', 'pID', 'cID')) . 'cPath=' . $cPath . '&action=new_product') . '">' . BUTTON_NEW_PRODUCTS . '</a></td></tr></table>');
            }
        }

Все. Это кажется что писанины много. А на самом деле все легко. пишите еси что отвечу.

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, что решили поделиться кодом.

Обязательно пригодится, не сейчас, так в будущем точно.

Ссылка на сообщение
Поделиться на другие сайты

нет проблем. Просто у кого то может возникнуть такая потребность. мож и пригодится кому. Забыл сказать, что пользователя-производителя надо делать админом и давать ему доступ только на categories.

По принципу описанному выше можно открывать/закрывать доступ к любой части кода  по следующей схеме

if ($_SESSION['manufacturers_id']==0){тут все для обычных пользователей}

else{тут для пользователей-производителей}

Ссылка на сообщение
Поделиться на другие сайты
  • 1 year later...

спс за код. Сейчас испробую.

Добавляется мгновенно или после одобрения администратором? Может допишите такой код - отправлено на проверку администратору. К примеру как отзывы от не зарегистрированных пользователей. Хотелось бы больше контроля, шутников много.

Ссылка на сообщение
Поделиться на другие сайты

Автор кода на форуме уже давно не был, так что вряд ли он допишет.

Разве что только дописать своими силами.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...