Jump to content
SpravkaCRM.ru - Ваш справочник по CRM
iwealth

Кастомная логика для доступа к записям

Recommended Posts

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

Для реализации данной логики нам понадобится файл modules/Accounts/Account.php
Ищем в нём метод create_new_list_query, если не находим то создаём. В ней мы ограничиваем доступ к записям в listview модуля Контрагенты. Фактически дописываем допольнительное условие в запрос по которому строится список в listview.

function create_new_list_query($order_by, $where,$filter=array(),$params=array(), $show_deleted = 0,$join_type='', $return_array = false,$parentbean=null, $singleSelect = false)
{
       global $current_user;

       $ret_array = parent::create_new_list_query($order_by, $where, $filter, $params, $show_deleted, $join_type, $return_array, $parentbean, $singleSelect);

       //если текущий пользовательне админ, то запрещам просмотр записей со статусом "в архиве"
       if(!$current_user->is_admin){
           $ret_array['where'] .= " AND accounts.contact_status <> 'archive'";
       }

       if($return_array)
       {
           return $ret_array;
       }

       return  $ret_array['select'] . $ret_array['from'] . $ret_array['where']. $ret_array['order_by'];
}

 

Далее нам необходимо ограничить доступ для просмотра и редактирования архивных контрагентов.
Для этого воспользуемся методом ACLAccess (так же ищем и дописываем код или создаём)

Здесь для редактирования, просмотра и удаления доступ запрещён. А сохранение закомментировано, для того чтоб обычный пользователь имел возможность поменять статус контрагента с какого-то значения на "архив" и сохранить.

function ACLAccess($view, $is_owner='not_set', $in_group='not_set'){
        global $current_user;

        $view = strtolower($view);
        switch($view){
            case 'edit':
            case 'detail':
//          case 'save':
            case 'editview':
            case 'delete':
                if(!empty($this->contact_status) && $this->contact_status == "archive" && !$current_user->is_admin){
                    return false;
                }
        }

        return parent::ACLAccess($view,$is_owner,$in_group);
}

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
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.


×
×
  • Create New...