Перейти к содержанию
GeorgyM

[Решено] Настроить админку под менеджера как ?

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

Всем привет.

Кто - нибудь вкурсе - как можно настроить админку под менагера так, что бы он мог просматривать и изменять заказы - но не мог их удалять совсем ?

Или если так нельзя - никто не в курсе где хранятся удаленные заказы - где их в админке можно найти ?

Поделиться сообщением


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

при удалении заказы удаляются, а не сохраняются.

сделать так, чтобы менеджер мог только редактировать заказы можно.

Поделиться сообщением


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

при удалении заказы удаляются, а не сохраняются.

сделать так, чтобы менеджер мог только редактировать заказы можно.

Мне так нравятся всегда Ваши ответы - мне даже кажется что Вы какой то особенный - очень умный и тонко устроенный робот - автоответчик :)

так как сделать то едрена мать ? :)

  • +1 4

Поделиться сообщением


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

формально - я ответил на ваши вопросы и прояснил ситуацию :wink:

фактически - вы не указали используемую версию движка, поэтому конкретики ждете зря :ugeek:

= = =

общая картина:

1) создается новая группа юзеров;

2) в контроллер и модель заказов админки (в методы удаления) добавляются проверки на принадлежность к группе. если менеджер из этой группы - передаем привет :ugeek: , если нет - обрабатываем запрос, как положено.

Поделиться сообщением


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

формально - я ответил на ваши вопросы и прояснил ситуацию :wink:

фактически - вы не указали используемую версию движка, поэтому конкретики ждете зря :ugeek:

= = =

общая картина:

1) создается новая группа юзеров;

2) в контроллер и модель заказов админки (в методы удаления) добавляются проверки на принадлежность к группе. если менеджер из этой группы - передаем привет :ugeek: , если нет - обрабатываем запрос, как положено.

Версия движка 1.5.4.1

Контроллер и модель заказов админки - это какие файлы - Вы не подскажите ?

Пример кода такой проверки у Вас имеется ?

Поделиться сообщением


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

мда... забыл про группу юзеров в админке.

вот так это делается:

создается новая группа пользователей в админке (например pureManager), смотрится ее ID

[=== admin/controller/sale/order.php ===]

в метод

private function validateDelete() {
 

после

if (!$this->user->hasPermission('modify', 'sale/order')) {
$this->error['warning'] = $this->language->get('error_permission');
}
 

добавляем

/* [webme] deny order deletions by specified user_group - begin */
$pureManagerGroupId = 11; // вот это ID созданной группы, которой ЗАПРЕЩАЕМ удалять заказы.
if ($this->user->getUsergroupId() == $pureManagerGroupId) {
$this->error['warning'] = $this->language->get('error_order_deletion_denied');
}
/* [webme] deny order deletions by specified user_group - end */
 

в языковой файл [=== admin/language/russian/sale/order.php ===]

добавляем

/* [webme] deny order deletions by specified user_group - begin */
$_['error_order_deletion_denied']			 = 'Пользуясь моментом, хочу передать привет дяде из Бобруйска.<br />Дядя, превед!';
/* [webme] deny order deletions by specified user_group - end */
 

[=== system/library/user.php ===] приводим к виду

добавляем себе всё, что отделено комментариями

/* [webme] deny order deletions by specified user_group - begin */
/* [webme] deny order deletions by specified user_group - end */
 
 

<?php
class User {
private $user_id;
private $username;
private $permission = array();
/* [webme] deny order deletions by specified user_group - begin */
private $usergroup_id;
/* [webme] deny order deletions by specified user_group - end */

public function __construct($registry) {
$this->db = $registry->get('db');
$this->request = $registry->get('request');
$this->session = $registry->get('session');

if (isset($this->session->data['user_id'])) {
$user_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$this->session->data['user_id'] . "' AND status = '1'");

if ($user_query->num_rows) {
$this->user_id = $user_query->row['user_id'];
$this->username = $user_query->row['username'];
/* [webme] deny order deletions by specified user_group - begin */
$this->usergroup_id = $user_query->row['user_group_id'];
/* [webme] deny order deletions by specified user_group - end */

$this->db->query("UPDATE " . DB_PREFIX . "user SET ip = '" . $this->db->escape($this->request->server['REMOTE_ADDR']) . "' WHERE user_id = '" . (int)$this->session->data['user_id'] . "'");

$user_group_query = $this->db->query("SELECT permission FROM " . DB_PREFIX . "user_group WHERE user_group_id = '" . (int)$user_query->row['user_group_id'] . "'");

$permissions = unserialize($user_group_query->row['permission']);

if (is_array($permissions)) {
foreach ($permissions as $key => $value) {
$this->permission[$key] = $value;
}
}
} else {
$this->logout();
}
}
}

public function login($username, $password) {
$user_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "user WHERE username = '" . $this->db->escape($username) . "' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))) OR password = '" . $this->db->escape(md5($password)) . "') AND status = '1'");

if ($user_query->num_rows) {
$this->session->data['user_id'] = $user_query->row['user_id'];

$this->user_id = $user_query->row['user_id'];
$this->username = $user_query->row['username'];
/* [webme] deny order deletions by specified user_group - begin */
$this->usergroup_id = $user_query->row['user_group_id'];
/* [webme] deny order deletions by specified user_group - end */

$user_group_query = $this->db->query("SELECT permission FROM " . DB_PREFIX . "user_group WHERE user_group_id = '" . (int)$user_query->row['user_group_id'] . "'");

$permissions = unserialize($user_group_query->row['permission']);

if (is_array($permissions)) {
foreach ($permissions as $key => $value) {
$this->permission[$key] = $value;
}
}

return true;
} else {
return false;
}
}

public function logout() {
unset($this->session->data['user_id']);

$this->user_id = '';
$this->username = '';

session_destroy();
}

public function hasPermission($key, $value) {
if (isset($this->permission[$key])) {
return in_array($value, $this->permission[$key]);
} else {
return false;
}
}

public function isLogged() {
return $this->user_id;
}

public function getId() {
return $this->user_id;
}

public function getUserName() {
return $this->username;
}

/* [webme] deny order deletions by specified user_group - begin */
public function getUsergroupId() {
return $this->usergroup_id;
}
/* [webme] deny order deletions by specified user_group - end */
}
?>
 

post-3682-0-19396900-1360137786_thumb.png

  • +1 1

Поделиться сообщением


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

Ниче себе - сейчас попробую - это засунуть в код .

Спасибо

Поделиться сообщением


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

Круто все работает - ГРАНД МЕРСИ

Поделиться сообщением


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

Хороший вопрос, нашел эту тему по запросу getUsergroupId()

а вот такой вопрос, как запретить менеджеру видеть при входе в админку статистику чего было продано и на сколько. Т.е. верхние 2 блока, менеджеру, а точнее, кладовщику, не нужны, надо только отмечать заказы кто забрал со склада и ставить им статус "Завершено". (это я решил способом настройки "группы пользователей" там и отметил только изменение и просмотр "Заказы"). А вот статистика нафиг ему с глаз долой. В идеале еще скрыть ему все пункты меню с глаз долой, чтоб не было соблазна хакеризмом заниматься, но думаю на основе того же алгоритма и это решается.

Поделиться сообщением


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

Так, на второй вопрос нашел ответ {на просторах тырнета} соответственно, запилил по этому же принципу и ответ на первый вопрос.

 

Как скрыть меню. Берете файл шаблона админки header.tpl (admin/view/template/common/header.tpl). На основе него создаете новый шаблон, предварительно удалив из него все лишнее.
Затем, в файл admin/model/user/user.php добавляете код:

 

public function getUserGroupId($user_id) {
    $query = $this->db->query("SELECT DISTINCT user_group_id FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$user_id . "'");
    if(isset($user_id)) 
    return $query->row['user_group_id'];
}

В файле admin/controller/common/header.php ищете:

$this->template = 'common/header.tpl';
И заменяете на:
$this->load->model('user/user');
if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
    $this->template = 'common/header.tpl';
} else {
    $this->template = 'common/header-usergroup.tpl';
}  

 

Теперь как скрыть статистику. Так же, переименовал файл home-usergroup.tpl и соответственно, повырезал оттуда блоки со статистикой (зато туда теперь можно вместить инструкцию или встроить пасьянс на флеше, хе-хе)

 

В файле admin/controller/common/home.php ищете:

 

$this->template = 'common/home.tpl';

заменяем на это (функция опредедления уже внесена выше в файле user.php)

 

        $this->load->model('user/user');
        if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
            $this->template = 'common/home-usergroup.tpl';
        } else {
            $this->template = 'common/home.tpl';
        }

 

Вуаля, все заработало.

Изменено пользователем lastrong
cenzoRED

Поделиться сообщением


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

Решено:

Добавить ДВУХ менеджеров, с разными доступами.
См предыдущий пост + мой :)

 

 if ($this->model_user_user->getUserGroupId($this->user->getId()) == 11) {
            $this->template = 'common/home_user.tpl';
        } 
   
        elseif ($this->model_user_user->getUserGroupId($this->user->getId()) == 12) {
            $this->template = 'common/home_K.tpl';
        } 
              else {
            $this->template = 'common/home.tpl';
        }

 

Поделиться сообщением


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

Всем привет.

Кто - нибудь в курсе - как можно настроить админку под менагера так, что бы он мог редактировать описание товара - но не мог его удалять или удалять товар в списке?

Т.е.  задача только правка текста к товару....ocStore Version 1.5.4.1

Поделиться сообщением


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

По аналогии, как выше описывали для заказов, править для товаров

 

Чего я реально не понимаю - это самой сути хотелок "мог редактировать - но не мог удалять" :ugeek:

Ну дадите вы права, не удалит, а так наредактирует (например заполнит все нулями), что итог будет ненамного лучше удаления :-D :-D :-D

 

Не?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW, Заполнит все нулями, получит предупреждение, что так делать нельзя. При рецидиве мы будем знать, что наш манагер плут и мошенник. А если он удаляет по тихому, то мы и не догадываемся ниочем.

Поделиться сообщением


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

Так, на второй вопрос нашел ответ {на просторах тырнета} соответственно, запилил по этому же принципу и ответ на первый вопрос.

 

Как скрыть меню. Берете файл шаблона админки header.tpl (admin/view/template/common/header.tpl). На основе него создаете новый шаблон, предварительно удалив из него все лишнее.

Затем, в файл admin/model/user/user.php добавляете код:

public function getUserGroupId($user_id) {
    $query = $this->db->query("SELECT DISTINCT user_group_id FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$user_id . "'");
    if(isset($user_id)) 
    return $query->row['user_group_id'];
}

В файле admin/controller/common/header.php ищете:

$this->template = 'common/header.tpl';
И заменяете на:
$this->load->model('user/user');
if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
    $this->template = 'common/header.tpl';
} else {
    $this->template = 'common/header-usergroup.tpl';
}  

Теперь как скрыть статистику. Так же, переименовал файл home-usergroup.tpl и соответственно, повырезал оттуда блоки со статистикой (зато туда теперь можно вместить инструкцию или встроить пасьянс на флеше, хе-хе)

 

В файле admin/controller/common/home.php ищете:

$this->template = 'common/home.tpl';

заменяем на это (функция опредедления уже внесена выше в файле user.php)

        $this->load->model('user/user');
        if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
            $this->template = 'common/home-usergroup.tpl';
        } else {
            $this->template = 'common/home.tpl';
        }

Вуаля, все заработало.

Привет, странно повторил всё,

1. Скопировал header.tpl,

2. Переименовал в header_users.tpl,

3. Залил на хостинг в admin/view/template/common/header_users.tpl, 

4. В папке common теперь находятся два файла header.tpl и header_users.tpl

5. В файл admin/model/user/user.php, в конце кода добавляем:

        public function getUserGroupId($user_id) {

        $query = $this->db->query("SELECT DISTINCT user_group_id FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$user_id . "'");
        if(isset($user_id)) 
        return $query->row['user_group_id'];
        }
6. В файле admin/controller/common/header.php ищете:
$this->template = 'common/header.tpl'; 
 
И заменяете на:
$this->load->model('user/user');
if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
    $this->template = 'common/header.tpl';
} else {
    $this->template = 'common/header-usergroup.tpl';

 

После всех манипуляций, перезагрузки браузера и на странице магазина и в админке, вроде бы всё хорошо

Но после выхода из админки пишет:

Notice: Error: Could not load template /admin/view/template/common/header-usergroup.tpl! in /system/engine/controller.php on line 70

 

Ещё у меня вопрос: я что то не понял, а где идёт подмена header.tpl на header_users.tpl

Поделиться сообщением


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

Кажется понял в чём ошибка:

 

6. В файле admin/controller/common/header.php ищете:
$this->template = 'common/header.tpl'; 
 
И заменяете на:
$this->load->model('user/user');
if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
    $this->template = 'common/header.tpl';
} else {
    $this->template = 'common/header-usergroup.tpl';

За место header-usergroup.tpl надо поставить моё название header_users.tpl !!!

 

Просто автор поста ни где в тексте не написал, что он при переименовании файла header.tpl, назвал его header-usergroup.tpl

Чем ввёл меня в лёгкое заблуждение.

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

Изменено пользователем VladisOK

Поделиться сообщением


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

а это для какой версии движка ? для 2.1 2.1 подойдёт ?

Поделиться сообщением


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

----------------------------------------------------------------------

to Krot:

Проверенно на версии 1.5.6.4, для 2.+ не подойдёт

----------------------------------------------------------------------

 

Прошу специалистов помочь адаптировать это же решение, но под 2.0 + версий

 

P.S. Считаю, что это решение должно быть по умолчанию в движке OpenCart, нет разрешения для менеджеров управлять какой либо из категорий в админке, значит и нет визуального отображения этих категорий для менеджеров. Не понимаю, из каких соображений это не сделано.

Изменено пользователем VladisOK

Поделиться сообщением


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

Fatal error: Call to undefined method ModelUserUser::getUserCategories() 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 24.04.2013 в 08:38, lastrong сказал:

Так, на второй вопрос нашел ответ {на просторах тырнета} соответственно, запилил по этому же принципу и ответ на первый вопрос.

 

Как скрыть меню. Берете файл шаблона админки header.tpl (admin/view/template/common/header.tpl). На основе него создаете новый шаблон, предварительно удалив из него все лишнее.
Затем, в файл admin/model/user/user.php добавляете код:

 


public function getUserGroupId($user_id) {
    $query = $this->db->query("SELECT DISTINCT user_group_id FROM " . DB_PREFIX . "user WHERE user_id = '" . (int)$user_id . "'");
    if(isset($user_id)) 
    return $query->row['user_group_id'];
}
 

В файле admin/controller/common/header.php ищете:


$this->template = 'common/header.tpl';
И заменяете на:

$this->load->model('user/user');
if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
    $this->template = 'common/header.tpl';
} else {
    $this->template = 'common/header-usergroup.tpl';
}  

 

Теперь как скрыть статистику. Так же, переименовал файл home-usergroup.tpl и соответственно, повырезал оттуда блоки со статистикой (зато туда теперь можно вместить инструкцию или встроить пасьянс на флеше, хе-хе)

 

В файле admin/controller/common/home.php ищете:

 


$this->template = 'common/home.tpl';

заменяем на это (функция опредедления уже внесена выше в файле user.php)

 


        $this->load->model('user/user');
        if ($this->model_user_user->getUserGroupId($this->user->getId()) == 1) {
            $this->template = 'common/home-usergroup.tpl';
        } else {
            $this->template = 'common/home.tpl';
        }

 

Вуаля, все заработало.

Call to undefined method ModelUserUser::getUserCategories() 

 

 

Когда захожу в Пользователи и нажимаю изменить права

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 06.02.2013 в 10:57, afwollis сказал:

[=== system/library/user.php ===] приводим к виду

добавляем себе всё, что отделено комментариями

 


/* [webme] deny order deletions by specified user_group - begin */
/* [webme] deny order deletions by specified user_group - end */
 

 

Подскажите пожалуйста, что конкретно прописывать system/library/user.php ?

Изменено пользователем VadimD

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.