Как разграничить права копирайтерам на добавление товаров?

Тема в разделе "OpenCart", создана пользователем mechenosec, 15 июл 2017.

  1. mechenosec

    mechenosec

    Регистрация:
    21 фев 2013
    Сообщения:
    119
    Симпатии:
    18
    Подскажите или модули или решения, как ограничить контент менеджерам доступ не ко всем товарам, а только добавленных ими или доступных им?
    Опенкарт построен там что можно дать доступ только ко всем товарам что не есть хорошо, нет возможности разрешить редактирование или добавление только в определенную категорию магазина, что бы не переживать что удалили какие-то фото, или удалили или отредактировали какие-то товары.
    Голову ломаю не могу придумать, как это реализовать?
    Пример:
    Схема добавить парсером 1000 товаров.
    Дать доступ 5-10 контент менеджерам что бы им доступно было или только выключенные товары, или товары определенных категорий, и каждый делал свое, не переживая что что-то испортят уже созданное.
    Или может использовать другой движок или другую копию опенкарта как буфер куда давать доступ а потом настроить обмен с основным магазином?
    Дайте пожалуйста совет или может что-то подобное реализовывал у себя?
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Из коробки - никак. Но вообще это не особо сложно, хотя в коде придёться поковыряться достаточно.

    Схема такая: добавляем в таблицу товаров в базе колонку с id пользователя, который этот товар добавил, создаём группу пользователей с ограниченным доступом и добавляем туда контент-менеджеров. Затем при любых операциях с товарами проверяем сперва группу, и если это группа ограниченного доступа, то затем проверяем является ли текущийпользователь "автором" товара.
     
  3. ISomeInterface

    ISomeInterface

    Регистрация:
    4 окт 2016
    Сообщения:
    106
    Симпатии:
    76
    То есть, вновь прибывшие товары должны быть обработаны кон.менеджерами.
    Тогда у товара должен быть флаг о том что его не редактировали и флаг что его редактируют (что бы не обрабатывали один и тот же товар).
    На странице списка продуктов сделать фильтр (не редактированные), применив который появится список товаров на обработку. Если товар открыт и обрабатывается меняем флаг на "редактируется" и он недоступен для других.
    Так же можно сделать доступ кон.мен. только к тем товарам что он создал или отредактировал, добавляя id его группы в отдельное поле товара, как предложил Dotrox.
    То есть кон.мен. будет доступно либо еще не редактированные товары или те что он создал.
    Ну и сделать группу для админа, которому будет доступно все.
    Все реально, просто нужно брать и делать. Подобных готовых решения я не встречал.
     
    mechenosec нравится это.
  4. mechenosec

    mechenosec

    Регистрация:
    21 фев 2013
    Сообщения:
    119
    Симпатии:
    18
    Помогите плиз сформировать правило что бы
    В разделе каталог - товары нужно сделать проверку если пользователь имеет группу id контент менеджеры то выводить товары где id пользователя соответствует значению user_eddit_id товаров, тоесть выводить в списке только доступные ему товары.

    Сделано:
    1. Добавлено поле в базе user_eddit_id, оно доступно через bath editor для редактирования, в него можно прописать id пользователя, так же что бы записывалось сюда id при создании товара.

    2. Создана отдельная группа контент менеджеры

    3. Ограничен доступ к фото, стоит модуль для загрузки на прямую с компьютера и раскладывает по папкам месяц и год, пока не понятно как с вставкой фото в самом редакторе.

    Сейчас пока в файле product_list.tpl леплю вот такой код

    $this->load->model('user/user');
    $user_group_id = $this->model_user_user->getUser($this->user->getId());
    $user_gid = $user_group_id['user_group_id'];
    $user_eid = $user_group_id['user_id'];
    ?>
    <?php if ($user_gid==18) { ?>

    <?php if ($products) { ?>
    <?php foreach ($products as $product) { ?>

    <?php if ($product['user_eddit_id'] == $user_eid) { ?>

    Проверка группы, и если что вывод разрешенных товаров.
    В базе создана строка user_eddit_id через модуль баз эдитор можно записать значение ID копирайтера.

    И кажется почти получилось, но по пагинации товары на тех же местах и остались, если он был на 8-й странице то так там и отображается.
     
    Последнее редактирование: 24 июл 2017
  5. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Как говорится, "когда кажется, креститься надо" :Smile:
    Вы делаете абсолютно неправильно!
    Ну, то что в шаблонах такое нельзя делать, в принципе - это вопрос в первую очередь качества кода. Но в данном случае делать что-либо в шаблоне - это ещё и бессмысленно. Вам нужно править запросы (в моделях), которые что-либо делают с товарами. Пагинация не меняется потому, что вы не влияете своим кодом на выборку. То есть, если у вас 100 товаров и только один доступен текущему пользователю, то выборка всё равно берёт все 100, а затем вы уже в шаблоне выкидываете лишние.

    А как вы с таким подходом будете новые товары добавлять? Самостоятельно создавать новые товары, прописывать там id копирайтера, а потом он уже сам будет его редактировать?
    Разве суть идеи была не в том, чтоб автоматом давать права на редактирование товара тому, кто его создал?
     
  6. mechenosec

    mechenosec

    Регистрация:
    21 фев 2013
    Сообщения:
    119
    Симпатии:
    18
    Там идея в том что бы добавив поле $product['user_eddit_id'] при создании товара записывался туда id пользователя его создавший, и таким образом логика не нарушается.
    Если к.менеджер находится в группе контент менеджеры то все ровно будет сначала проверка группы потом проверка соответствия $product['user_eddit_id'] = $user_id
    Тоесть просто оставить кнопку добавить товар.
    Но если товар будет добавлен массово импортом, или парсером то уже ответственное лицо через баз эдитор фильтрует удобно товар выделяет любое количество быстро хоть 100 хоть 1000 хоть 10 и меняет на ID нужно копирайтера, один специализируется на одной группе товара другой на своей.

    И в товар просто добавить чекбокс по типу статусов заказа:
    новый, на проверку, доработать, одобрено, и оплачено
    И что бы если оплачено то закрывалась возможность редактировать.
    А внизу потом подсчет одобренных товаров отдельного пользователя, от этого считалась сумма оплаты.

    Вот как это через модель реализовать пока не знаю, нужно подумать.
    Почему-то думал что уже почти сделал, ан нет.
    Спасибо вам за подсказку, буду искать где это делается.
     
  7. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    Есть такой модуль, а точнее такая разработка

    Можно запретить удалять, можно запретить редактировать
    Можно запретить редактировать в категориях
    Можно запретить изменение цені, количества

    Все можно. был бы спрос плятежеспособным.
     
  8. mechenosec

    mechenosec

    Регистрация:
    21 фев 2013
    Сообщения:
    119
    Симпатии:
    18
    Уже спасибо ISomeInterface реализовал возможность давать доступ к отдельным товарам, тем где есть разрешение и тех что создал, с фильтрацией по статусам: на доработку, одобрен, оплачен, и т.д., тоесть что бы принимать выполненные работы от фрилансеров и у них не было возможности удалить товары или отредактировать те чо сданы.
     
  9. munhgauzen

    munhgauzen

    Регистрация:
    14 янв 2018
    Сообщения:
    1
    Симпатии:
    0
    хм тоже интересно подобное решение. Сколько будет стоить?
     
  10. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    под заказ
     
  11. AdWin

    AdWin

    Регистрация:
    18 июл 2018
    Сообщения:
    3
    Симпатии:
    0
    Есть еще вариант - разбить по базам и дать доступ к разным базам разным контент-менеджерам.
    Это делается через приложение WinShop.
    А как реализовали по итогу?