Анализ прав пользователей, версия 1.6




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

71 Comments

  1. ChinChin

    Был бы отчет в категории «Для всех» может и скачал бы посмотреть, а так гляну — может что полезнее найдется — ведь в день на ИС можно ошибиться только один раз 🙁

    Reply
  2. YVolohov

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

    Reply
  3. artbear

    Только получить данные? изменить их в этом отчете получится?

    Reply
  4. YVolohov

    (4) В новой версии (только что выложил) можно изменять данные. Естественно создавать/редактировать роли нельзя, это можно делать только вручную через конфигуратор. Но вот назначать уже существующие роли пользователям можно, для этого в отчет была добавлена матрица ролей.

    Reply
  5. Valerich

    судя по описанию то что мне надо, но не доходят руки самому написать. плюс авансом

    Reply
  6. Cifer

    Наглядно. Плюс однозначно!

    Reply
  7. asn70

    Даю плюс ….

    Reply
  8. Granat

    Незаменимая вещь! Уже 2 года как пользуемся сложной таблицей, где все права расписаны в разрезе пользователей и ролей. При каждом изменении прав приходится вручную корректировать данные таблиц. Теперь все намного проще! Спасибо!

    Reply
  9. YVolohov

    Очень приятно слышать такие отзывы о своей работе, спасибо за поддержку.

    Reply
  10. an77

    Класс! Полная картинка!

    (теперь будет намного легче)

    Спасибо.

    Reply
  11. balu_dnepr

    Отличная вещь. Плюс однозначно. Автору респект.

    Reply
  12. FlyLink

    С матрицей ролей все хорошо. +

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

    но слева уже есть отбор по элементам. Зачем тогда справа их скрывать, если все равно потом щелкать на каждом мышкой?

    Почему в левой колонке на вкладке «метаданные» нельзя отметить сразу все или снять отметки у всех?

    Reply
  13. YVolohov

    (13) В левой колонке можно отметить или снять отметку для всех элементов. Нужно установить/снять отметку на корневом элементе.

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

    Reply
  14. FlyLink

    (14) Спасибо. чет я сразу не догадался… 🙂

    Reply
  15. sovt

    спасибо!

    Reply
  16. FiZikus

    Реально, супер вещь!!!! Респект, однозначно, и конечно + !!!

    Reply
  17. alexmobile

    А под 7.7 нечто подобное есть?

    Reply
  18. YVolohov

    (18) В 7.7 я не встречал средстств для программной работы с правами. Так что, скорее всего, там такую обработку создать нельзя. Разве что не средствами платформы. Найти, где физически хранятся права пользователя и прочитать их просто из файла с помощью специально написанной программы.

    Reply
  19. BigMih

    Отличная обработка! Давно уже стояла проблема анализа прав пользователей. Было несколько маленьких одноразовых решений, но такого комплексного подхода к решению конечно не было. Огромное спасибо!:)

    Reply
  20. Virsy

    Отличная штука! Огромное спасибо. Не хватает сохранения списков помеченных объектов (метаданных,пользователей,ролей) в файлик.. оч прошу сделать т.к. это сэкономит уйму времени и сил

    Reply
  21. Akv@rel

    Спасибо, обработка отличная!!

    Небольшое пожелание: при формировании на закладке «Анализ прав доступа» хотелось бы выбирать из перечня «Право доступа» нужные, например, вывести список объектов по пользователям, которые имеют право «Редактирование».

    Это было бы очень удобно при анализе очтета.

    Спасибо!!!

    Reply
  22. DealMaker

    Спасибо за отчёт.

    Было бы удобно закрепить шапку таблицы, чтобы при прокрутке вниз знать к какому пользователю/роли относятся те или иные галочки

    Reply
  23. Filt

    Спасибо за отчет. Удобно выгружать сведения для аудиторских фирм.

    Reply
  24. Vond

    Как то сильно сложно воспринимается символ V как отметка — реально сперва просто как царапает глаз. Может как вариант доточка выбора варианта отметки — V, Да, * и т.п.

    Reply
  25. SiviS

    Подскажите, кто нибудь проверял данный отчет на платформе 8.2, будет ли он там работать?

    Reply
  26. mapt

    (26) SiviS, +1

    Reply
  27. YVolohov

    (26)(27) Да, будет. Но только в обычном режиме. Управляемые формы не поддерживает.

    Reply
  28. hotey

    Спасибо! То что доктор прописал. Как раз искал отчет с матрицей прав Отчеты/Роли.

    Reply
  29. Aleksey-29

    Автор, а есть описание обработки, как в этом всем разобраться? Если есть, то будем качать. Если нет, то наугад можно что-нибудь не то натворить ==> предлагаю сделать. ))

    Reply
  30. Гость

    А как насчет уровня доступа RLS?

    Reply
  31. YVolohov

    (30) Обработка практически ничего не изменяет, так что при всем желании ничего она натворить не может. Единственное, что можно изменять с помощью этой обработки — это назначать пользователям роли в режиме матрицы. Все остальные отчеты только на чтение, данные они не изменяют.

    (31) Обработка не привязана к какой-либо конфигурации, она универсальна. В силу этого она подтягивает только ту информацию, которую можно вытащить средствами платформы. Уровень доступа РЛС сюда не входит, он завязан на функционале типовых конфигураций. Можно посмотреть только само наличие РЛС — есть или нет.

    Reply
  32. Aleksey-29

    Спасибо. Кстати, пользователей можно в иерархии показывать. Так выбирать было бы легче.

    Reply
  33. YVolohov

    (33) Можно выбирать состав пользователей, но порядок вывода менять нельзя, это же не СКД

    Reply
  34. YVolohov

    (35) Установка/снятие отметки на корневом элементе дерева отмечает/снимает отметки со всего дерева.

    Сворачивание/разворачивание группировок в отчете изначально заложено в системе. Нужно щелкнуть правой кнопкой мыши на серой полосе слева от отчета (там где расположены управляющие элементы группировок) и выбрать в меню нужный уровень развертывания.

    Reply
  35. pt_olga

    ёлки… зря скачала, искала аналогичную обработину под 77 🙁

    Reply
  36. higs

    Хорошая нужная обработка, спасибо!!!

    Reply
  37. Valerich

    можно ли еще прикрутить вариант отчета: сравнение прав нескольких выбранных ролей — т.е. показать только их различия?

    для чего надо:

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

    Пользоваться для этого вариантом «Все роли» как-то не очень удобно. А так получил бы перечень различий, отработал по нему и лишнюю роль убил.

    Или наоборот роли разъединять, чтобы понять, что все сделано правильно….

    Reply
  38. Rad90210

    Блин! а я вот не могу себя заставить зделать что -то для кого-то за так… Действительно крутая штука! Буду пользовать до дыр )) Еще раз спасибо.

    Reply
  39. lizard

    Спасибо.Очень наглядная и полезная обработка.

    Reply
  40. YuraLu

    Впечатлило. Нужнейшая вещь!!!

    Reply
  41. dayton78

    Хорошая вещь!

    Reply
  42. xpym-xpym

    Старая добрая вещь на старой работе пользовались теперь и на новой пригодится)))

    Reply
  43. Shilov

    Обработка корректно работает и в УПП 8.2 (на первый взгляд). Был бы ещё фильтр по использованным объектам метаданных (те справочники,документы, регистры, в которых есть хоть одна запись).

    Reply
  44. Prozer

    БП 2.0 Выдает ошибку

    {Форма.Форма.Форма(268)}: Поле объекта недоступно для записи (Пользователи)

    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();

    Reply
  45. YVolohov

    (46) Нужно в отладчике посмотреть, что такое «Пользователи», какой у них тип.

    Reply
  46. bida

    (46) Prozer,

    По кнопке «Кофигуратор» нужно нажать. Попадешь в конфигуратор на эту строчку. Далее надо переименовать «Пользователи», например в «Пользователии» и изменить на 2 строки ниже текст с «Для Каждого Пользователь Из Пользователи Цикл» на «Для Каждого Пользователь Из Пользователии Цикл». Всё заработает. Проблема была в том, что в БП 2.0 есть общий модуль «Пользователи» и 1с запуталась.

    Reply
  47. YVolohov

    (48) Резонное замечание, +500. Кстати, по идее локальная переменная должна иметь более высокий приоритет, чем модуль. И идентификатор в первую очередь должен быть сопоставлен именно с переменной. Но у 1с видимо своя логика.

    Reply
  48. koladen

    Спасибо!

    Reply
  49. serge_focus

    Спасибо, обработка отличная!!

    Поддерживаю (45) Был бы ещё фильтр по использованным объектам метаданных (те справочники,документы, регистры, в которых есть хоть одна запись).

    Не смог найти как проанализировать какие регистры при этом доступны или отчеты/обработки, а так же общие формы.

    Reply
  50. StepanZaytsev

    {Форма.Форма.Форма(268)}: Поле объекта недоступно для записи (Пользователи)

    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();

    Reply
  51. olezhe

    Волшебно. Скачал, запустил, выдал справку по правам начальнику. За 10 минут. Все довольны.

    Плюсую.

    Reply
  52. Klesk666

    супер, спасибо

    Reply
  53. PASAHAKA

    Спасибо автору, это лучшее, что я видео по данной теме.

    Reply
  54. unichkin

    Большое спасибо) Хотелки:

    1) фиксировать в результирующем таб. документе шапку

    2) Если у всех подчиненных элементов группировки стоит галочка «V» — т.е. все доступно, то ставить ее у корня.

    Это просто к слову, нет возможности доработать, и бог с ним. Просто мне кажется так было бы лучше)

    Reply
  55. mikele_bes

    ошибка валится

    {Форма.Форма.Форма(268)}: Поле объекта недоступно для записи (Пользователи)

    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();

    переименовал «Пользователи» и все заработало

    Reply
  56. fostayn

    Спасибо!!!! Супер! очень помогло

    Reply
  57. nik-boss

    Спасибо огромное!!! Отчет на самом деле то, что нужно, очень детально и подробно!

    Reply
  58. Новиков

    Давным давно откуда то появился этот отчет, решил посмотреть кто его сделал — пришел сюда.

    Если авто смотри комменты и хоть что-то еще планирует делать, добавлю хотелку:

    при построении матрицы из закладки «Роли» необходим фильтр «показывать только установленные». Напр., строим матрицу по роли «Главный бухгалтер», показывается список из +100500 пользователей, у которых у 1-ого из них установлена эта галка. Хотелось бы, чтобы по фильтру «показывать только установленные» отображался в матрице только этот, единственный пользователь. Эту же хотелку, можно оттранслировать далее: если в любом столбике нет ни одной галочки — столбик не показывать. Если в любой строчке нет ни одной галки — строчку не выводить. Т.е. по максимуму скрыть пустоту.

    Reply
  59. Degtjarev

    Спасибо. Работает и в БП 3.0, если запустить в обычных формах

    Reply
  60. 20tanush

    Благодарю за отчет!

    Reply
  61. jaroslav.h

    Дякую

    Reply
  62. ankr

    (52) shrekerererer,

    На тему ошибки… Можно ничего не переименовывать,

    просто в начале процедуры явно указать локальную переменную:

    Перем Пользователи;

    Все будет работать.

    Reply
  63. Necessitudo
    Reply
  64. tmm1970

    Добрый день.

    В 1С 8.2. УПП хочу вывести Анализ прав пользователей, выбираю метаданные — Справочники, нажимаю Выполнить. Выходит ошибка {Форма.Форма.Форма(798)}: Ошибка при вызове метода контекста (Добавить)

    ТЗВозврат.Колонки.Добавить(«К_» + Строка(Счетчик),ОТБ);

    по причине:

    Неверное имя колонки

    В чем может быть причина?

    Reply
  65. tmm1970

    Разобралась, извините. Спасибо. Очень помогло.

    Reply
  66. Muhin555

    Можно еще «допилить» сравнение ролей и прав доступа между двумя базами по OLE. Очень бы упростило жизнь тем, у кого несколько одинаковых баз.

    P.S. А еще в свете проверки «сквозного» доступа платформы 8.3 сделать проверку доступа к подчиненным ссылкам регистров. Т.е. когда делаешь например отчет по долгам из регистра накопления «ВзаиморасчетыСКонтрагентами» при отсутствии права «Просмотр» у одного из регистраторов (к примеру «АвансовыйОтчет») невозможно будет получить в СКД поле «ДокументСсылка.ЗаказПокупателя.Дата» измерения «Сделка» ….. Хорошо бы было сделать такой анализ «недоступности» по ролям.

    Reply
  67. fixin

    не могу ничего сказать, т.к. не для УФ.

    Reply
  68. VladC#

    При попытке открыть обработку в УТ 10.3:

    {ВнешняяОбработка.АнализПравПользователей.Форма.Форма.Форма(268)}: Поле объекта недоступно для записи (Пользователи)

    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();

    Reply
  69. kare

    (70)Решение есть в комментариях. Необходимо «Пользователи = «переделать к примеру в «перемПользователи = «. см Комментарий № 48

    Reply
  70. loginovvn

    есть еще добрые люди! матрица получилась монстровая — но все таки ее можно анализировать! а для анализа расхождений в настройках прав — самое и то!

    Reply
  71. bogdan_sukonnov

    Для меня главный минус даже не обычное приложение, а то, что не умеет показывать только те роли, которые дают права. Список всех ролей, где надо высматривать стоят ли галки — немного не то, что мне нужно

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *