Jump to content
Sign in to follow this  
GeorgyM

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

Recommended Posts

Всем привет.

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

  • +1 4

Share this post


Link to post
Share on other sites

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

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

= = =

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

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

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

Share this post


Link to post
Share on other sites

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

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

= = =

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

создается новая группа пользователей в админке (например 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

Share this post


Link to post
Share on other sites

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

Спасибо

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

Как скрыть меню. Берете файл шаблона админки 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';
        }

 

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

Edited by lastrong
cenzoRED

Share this post


Link to post
Share on other sites

Решено:

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

 

 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';
        }

 

Share this post


Link to post
Share on other sites

Всем привет.

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

 

Не?

Share this post


Link to post
Share on other sites
AlexDW, Заполнит все нулями, получит предупреждение, что так делать нельзя. При рецидиве мы будем знать, что наш манагер плут и мошенник. А если он удаляет по тихому, то мы и не догадываемся ниочем.

Share this post


Link to post
Share on other sites

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

 

Как скрыть меню. Берете файл шаблона админки 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

Share this post


Link to post
Share on other sites

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

 

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

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

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

Edited by VladisOK

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

to Krot:

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

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

 

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

 

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

Edited by VladisOK

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В 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() 

 

 

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

Share this post


Link to post
Share on other sites
В 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 ?

Edited by VadimD

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.