фильтровать записи в представлении всплывающего списка, если назначенный пользователь является логином SUITECRM - PullRequest
1 голос
/ 04 октября 2019

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

Причина, по которой я не делаю этого в роляхуправление связано с тем, что если я назначил пользователя для записи клиента, то другие пользователи с такой же ролью не смогут его увидеть, поэтому я установил вкладку role-> list на «all» и добавил пользовательский код в виде списка, которыйтолько пользователи могут видеть свои собственные записи.

Вот что я сделал.

<?php

    require_once('include/MVC/View/views/view.popup.php');

    class AccountsViewPopup extends ViewPopup
    {
        public function display()
        {
            parent::display(); // TODO: Change the autogenerated stub

            require_once 'modules/ACLRoles/ACLRole.php';
            $ACLRole = new ACLRole();
            $roles = $ACLRole->getUserRoles($GLOBALS['current_user']->id);

            if (in_array('User1', $roles)) {

                global $db, $current_user;

                $this->where .= " AND accounts.assigned_user_id = '$current_user->id' AND deleted=0 ";
            }
        }
    }

Но я получаю эту ошибку:

Неопределенное свойство: AccountsViewPopup :: $ where

1 Ответ

2 голосов
/ 06 октября 2019

Только для просмотра списка : custom/modules/MODULE_NAME/views/view.list.php

и следующий код помощи:

require_once('include/MVC/View/views/view.list.php');
class MODULE_NAMEViewList extends ViewList {

    function listViewProcess() {
        global $current_user;
        $this->params['custom_where'] = ' AND module_name.name = "test" ';

        parent::listViewProcess();
}

}

Для списка и всплывающих окон (оба) :

Вам необходимо изменить логику внутри функции create_new_list_query, которая фактически готовит запрос. Некоторые модули переопределяют его на уровне компонента (например, см. modules/Leads/Lead.php).

Если вы хотите переопределить его безопасным способом обновления, то создайте файл в пользовательском каталоге, например: custom/modules/Leads/Lead.php, а затем расширьте его из класса базового компонента следующим образом:

<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

require_once('modules/Leads/Lead.php');
class CustomLead extends Lead {

    function create_new_list_query($order_by, $where,$filter=array(),$params=array(), $show_deleted = 0,$join_type='', $return_array = false,$parentbean=null, $singleSelect = false, $ifListForExport = false)
    { 
        // Code from create_new_list_query in and then modify it accordingly. 
    }
}

Зарегистрируйтесьновый класс бинов в этом месте: custom/Extension/application/Ext/Include/custom_leads_class.php и регистрационный код будет выглядеть следующим образом:

<?php
$objectList['Leads'] = 'Lead';
$beanList['Leads'] = 'CustomLead';
$beanFiles['CustomLead'] = 'custom/modules/Leads/Lead.php';
?>
...