"Ролевое" управление пользователями (8.1-8.2)




Принцип обмена данными из 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='\

52 Comments

  1. ll13

    Зачем Вы украли чужую разработку ?

    Это тоже самое, что взять к примеру конфигурацию 1С:Бухгалтерия предприятия, добавить пару отчетов и выкладывать её под названием «МОЯ СУПЕР БУХГАЛТЕРИЯ ПРЕДПРИЯТИЯ». Выкладывать «доработанную версию» может только автор.

    Reply
  2. Autodafe

    (1) Менеджер настроек пользователей тоже построен на данной публикации и что? Я специально указал источник, чтобы не было претензий что я «стырил». Из той обработки я только воспользовался механизмом вывода, который я мог тоже написать. У моей обработки другое направление.

    Reply
  3. ll13

    (2) Ну Вы жжете, «У моей обработки другое направление.»

    У вашей обработки даже название такое же — «Матрица ролей пользователей», и то что вы к ней прикрутили пару бантиков ничего не меняет…

    Reply
  4. Autodafe

    (3) Вы хоть посмотрели на обработку?

    Reply
  5. Autodafe

    (3)

    У вашей обработки даже название такое же — «Матрица ролей пользователей»

    Вы наверно ослепли раз говорите что такое же название

    Reply
  6. ll13

    (5) Ну конечно же, приписка «(для типовых конфигураций)» абсолютно всё меняет…

    как же я её не заметил…

    Reply
  7. Istur

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

    По моему мнению у программистов есть право модифицировать разработки друг друга.. Вспомним все тот же линукс. Так что обработка имеет право на существование, это не нарушение авторских прав. Но тут конечное слово у автора обработки-первоисточника.

    Reply
  8. Autodafe

    (7) Спасибо за советы, исправлю

    Reply
  9. Istur

    (6) Ты не совсем прав мне кажется. По моему субъективному мнению можно модифицировать другие разработки, но потомок должен соответствовать некоторым требованиям: 1. другое название. 2. указан в первоисточнике источник и дана на него ссылка. 3. изменено должно быть не 2 реквизита и не перерисована форма, изменения должны быть значительными.

    Эта обработка всем 3 требованиям соответствует, так что все соблюдено. И более того, я выкладывал обработку по настройкам прав, а перед этим смотрел, что уже выложено, дабы не заниматься мартышкиным трудом. И когда просматривал «Матрицу настроек пользователей», мне тоже показалось, что именно тех вещей, которые сейчас и реализованы, в ней не хватает.. Так что по-моему мнению автор молодец, напрасно ты его так.

    Reply
  10. Istur

    (0) Переложи лучше обработку в «Каталог → АДМИНИСТРИРОВАНИЕ БАЗЫ ДАННЫХ → Управление правами и паролями»..

    Reply
  11. Istur

    (6) Конечно в начале он сделал не все корректно, это косяк с его стороны, но ведь поправился..

    Reply
  12. ll13

    (9) Минус я конечно сниму, я не вредный, но вот осадок остался…

    Программист может модифицировать другие разработки если их автор дал на это явное разрешение, либо «для личного использования» не выкладывая их.

    Я писал в первом посту: если я модифицирую «1С:Бухгалтерия предприятия» то я смогу спокойно её продавать/раздавать, не спрашивая 1С ? Так получается ? В то же время модифицировать «для себя» мне никто не запрещает 🙂

    Reply
  13. Ish_2

    (10) Согласен.

    Reply
  14. Autodafe

    (10) (13) ок, подправил 🙂

    Reply
  15. Autodafe

    (12) Автору написал письмо с просьбой о разрешении. Буду ждать ответа. 🙂

    Reply
  16. Expert1C

    (15) мне в общем все равно. это не комерческая публикация, а авторские права меня интересуют только в денежном выражении.

    Вот если бы здесь было разрешено также публиковать предложения услуг (как раньше) тогда я бы даже приветствовал наличие клонов со ссылками на меня 🙂

    это же не один клон — есть еще вариант под 8.2 (писал не я) — как пример в http://infostart.ru/public/68368

    Reply
  17. Autodafe

    Если вам понравилось не забываем плюсовать. 😉 Автору будет очень приятно, т.к. он набирает рейтинг 😳

    Reply
  18. ZyMik

    Профили полномочий в УПП данная обработка поддерживает?

    Reply
  19. Autodafe

    (18) нет, а каким образом вы это видите?

    Reply
  20. Istur

    (18) Профили реализованы вроде бы только в моей обработке Настройка и анализ прав пользователей, больше нигде не встречал((

    Reply
  21. Autodafe

    (18) По просьбам трудящихся :)))

    Reply
  22. ZyMik

    Что значит групировка по профилю? Права профиля изменять можно? на пользователя изменения передаются?

    Профиль — по сути тот же пользователь. только изменение его прав ведет к изменению у всех пользователей с данным профилем.

    Скорее всего нужна закладка для отдельного редактирования прав профиля или переключатель с профиля на пользователя.

    Reply
  23. Autodafe

    (22) Поэтому я и спросил «каким образом вы это видите?». По поводу группировки по профилю смотрите 3-й скрин: Вариант отчета: «Профили пользователей». Права профиля изменять нельзя. Велосипед городить не хочу, как правильно заметил товарищ ниже у него это реализовано.

    Reply
  24. Acasta

    Спасибо!

    Reply
  25. BagА

    Спасибо, в целом не плохо, но не совсем подходит для УТ. Плюсую

    Reply
  26. AverinaSveta

    Спасибо автору, обработка здорово помогла при инвентаризации ролей!

    Reply
  27. Autodafe

    (26) AverinaSveta, Спасибо, рад слышать что обработка помогла )

    Reply
  28. нормальный такой

    Спасибо автору. Пригодилось при внедрении КА и переноса большого числа пользователей с различными ролями.

    Так же помогла при инвентаризации ролей и пригодилась как отчет руководству.

    Reply
  29. eryomenko

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

    Reply
  30. maratimus

    Спасибо, очень помогла для выявления пользователей с полнымим правами.

    Написана в лучших традициях 1с.

    Автор молодец.

    Рекспект.

    Reply
  31. semenich_b

    Очень полезно, спасибо автору!

    Reply
  32. invest0r

    У меня ошибка

    {ВнешнийОтчет.РолевоеУправление.МодульОбъекта(316)}: Ошибка при установке значения атрибута контекста (Текст)

    ПостроительОтчета.Текст =

    по причине:

    {(6, 15)}: Поле не найдено «Пользователи.ПрофильПолномочийПользователя»

    Пользователи.<<?>>ПрофильПолномочийПользователя КАК ПрофильПользователя,

    Reply
  33. Autodafe

    (33) invest0r, а в какой конфигурации используете?

    Reply
  34. invest0r

    Бухгалтерия предприятия, редакция 2.0 (2.0.34.6)

    Reply
  35. Autodafe

    Ошибку исправил — файл перезалил

    Reply
  36. invest0r

    спасибо )

    Reply
  37. invest0r

    Если выбрать Вариант отчета «Профили пользователей» то выдает ошибку

    {ВнешнийОтчет.РолевоеУправление.МодульОбъекта(287)}: Ошибка при установке значения атрибута контекста (Текст)

    ПостроительОтчета.Текст =

    по причине:

    {(7, 63)}: Неверные параметры «Справочник.ПрофилиПолномочийПользователей.ПустаяСсылка»

    КОГДА Пользователи.ПрофильПолномочийПользователя = ЗНАЧЕНИЕ(<<?>>Справочник.ПрофилиПолномочийПользователей.ПустаяСсылка)

    Reply
  38. Autodafe

    (38) invest0r, так вроде в бухгалтерии и нету профилей, поэтому в ошибку выдает, просто нет заглушки на этот случай.

    Reply
  39. invest0r

    ясно )

    Reply
  40. DoctorRoza

    Надо посмотреть

    Reply
  41. electronik

    Посмотрим Протестируэм Отпишемся

    Reply
  42. forurchik

    интересня штучка обязательно по попробую

    Reply
  43. cmd_vasec

    А можете сделать Пользователь-Профиль, а не Пользователь-роль?

    Reply
  44. Silver1975

    Посмотрел, спасибо! Пользователей не много поэтому раздача прав особо не напрягает, а в общем… неплохо… наглядненько… Найду применение 🙂

    Reply
  45. AltF1

    Полезно, хотя и действительно — можно было свою идею с «нуля» развить.

    Reply
  46. Hans

    Под УТ 10.3 она не работает. Там нет профилей никаких.

    Reply
  47. Autodafe

    (47) Hans, Может не работать только с профилями, а так то работает?

    Reply
  48. Hans

    Так не знаю. Мне надо анализировать в УТ 10.3 =(

    Reply
  49. Hans

    в других конфигурациях я не тестил.

    Reply
  50. tehas

    нужная обработка, сенк

    Reply
  51. eeeio

    черт, я изобрел велосипед 🙁

    Reply
  52. b-dm

    Ролевое управление пользователями, офигенная вещь!)

    Reply

Leave a Comment

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