Məzmuna keç
Educora
Universitet25 dəq13 / 14

Giriş hüquqları, RLS və inteqrasiya: JSON, XML, HTTP-servislər

Rollar və hüquqlarla kimin nəyi görə və dəyişə biləcəyini müəyyən et, yazılar səviyyəsində məhdudiyyətləri (RLS) qur, JSON və XML ilə məlumat mübadiləsi apar, HTTP-servis yaz və xarici API-ləri çağır.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Rolları, əsas və interaktiv hüquqları layihələndirmək, hüquqları kodda yoxlamaq
  • Seans parametrləri ilə RLS məhdudiyyəti qurmaq və onun təsirini izah etmək
  • JSON/XML ilə işləmək, HTTP-servis yaratmaq və xarici HTTP API-ni çağırmaq

Real layihədə kod yazmaq işin yalnız yarısıdır. Anbardar Murad yalnız öz anbarının sənədlərini görməlidir, əmək haqqını isə heç görməməlidir. Onlayn mağaza saytı mal qalıqlarını hər dəqiqə 1C-dən almalıdır, 1C isə bankdan valyuta məzənnələrini yükləməlidir. Bu dərs 1C proqramçısının iki peşəkar bacarığına həsr olunub: təhlükəsizlik və inteqrasiya.

Rollar və giriş hüquqları

Rol (Общие › Роли) hər metadata obyekti üçün hüquqlar dəstidir. İstifadəçiyə bir neçə rol verilə bilər və hüquqlar toplanır: rollardan heç olmasa biri hüquq verirsə, istifadəçi onu alır. «Qadağan edən» rol yoxdur — ona görə rolları kiçik və məqsədli yarat: Кладовщик, Бухгалтер, ЧтениеСправочников.

HüquqMənası
Чтение, Добавление, Изменение, Удалениеəsas hüquqlar: məlumatla istənilən iş, o cümlədən kodla
Просмотр, Редактирование, Интерактивное добавление, Интерактивное удалениеinteraktiv hüquqlar: istifadəçinin formada edə bildikləri
Проведение, Отмена проведенияsənədlərin keçirilməsi və keçirilmənin ləğvi
Администрирование, Монопольный режимkonfiqurasiya səviyyəsində xidməti hüquqlar
1C
Если Не ПравоДоступа("Изменение", Метаданные.Документы.РасходТовара) Тогда
    ВызватьИсключение "Недостаточно прав для изменения документа";
КонецЕсли;

Если РольДоступна("Бухгалтер") Тогда
    // показываем дополнительные колонки
КонецЕсли;
ПравоДоступа() konkret hüququ, РольДоступна() rolu yoxlayır. Hüququ yoxlamaq daha etibarlıdır: rollar sonradan yenidən adlandırıla və bölünə bilər.

Yazılar səviyyəsində məhdudiyyət (RLS)

Rol «РасходТовара sənədlərini oxumaq olar» deyir, amma «hansılarını» demir. Bunun üçün RLS (Record Level Security) — məlumatlara girişin yazılar səviyyəsində məhdudlaşdırılması var. Чтение, Добавление, Изменение və Удаление hüquqlarına sorğu dilinə bənzər şərt yazılır. Şərtdə adətən seans parametrləri istifadə olunur — onlar seans başlayanda УстановкаПараметровСеанса emalçısında doldurulur.

1C
// Модуль сеанса
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    // НастройкиПользователей - наш общий модуль
    ПараметрыСеанса.ТекущийСклад = НастройкиПользователей.СкладТекущегоПользователя();
КонецПроцедуры
1C Query
ГДЕ Склад = &ТекущийСклад
Кладовщик rolunda РасходТовара sənədinin Чтение hüququna məhdudiyyət mətni: istifadəçi yalnız öz anbarının sənədlərini görür. Bir neçə rolun məhdudiyyətləri ИЛИ ilə birləşir.

RLS-in iki mühüm nəticəsi var. Birincisi, oxuma məhdudiyyəti olan cədvələ sorğu istifadəçinin görə bilmədiyi yazıya rast gələrsə, xəta verir; yalnız icazəli yazıları səssizcə almaq üçün ВЫБРАТЬ РАЗРЕШЕННЫЕ (SELECT ALLOWED) yazılır. İkincisi, platforma şərti hər sorğuya əlavə edir, ona görə mürəkkəb RLS bazanı yavaşlada bilər. Serverdə hüquq yoxlamalarını bilərəkdən yan keçmək lazımdırsa, УстановитьПривилегированныйРежим(Истина) və ya Привилегированный bayraqlı ümumi modul istifadə olunur.

Nümunə 1: Muradın anbarı

Anbardar Murad yalnız «Gəncə» anbarının mədaxil və məxaric sənədlərini görməli, yaratmalı və keçirməlidir, malların kataloqunu isə yalnız oxumalıdır. Giriş sistemini layihələndir.

Həllini göstər
1) Кладовщик rolu: ПриходТовара və РасходТовара üçün Чтение, Добавление, Изменение, Просмотр, Редактирование, Проведение; Товары üçün yalnız Чтение və Просмотр.
2) ТекущийСклад seans parametri (tip СправочникСсылка.Склады), УстановкаПараметровСеанса-da istifadəçinin tənzimləmələrindən doldurulur.
3) Sənədlərin Чтение və Изменение hüquqlarına RLS: ГДЕ Склад = &ТекущийСклад.
4) Hesabat və siyahı sorğularında ВЫБРАТЬ РАЗРЕШЕННЫЕ.
5) Yoxlama: Murad kimi daxil ol, «Bakı» anbarının sənədinin görünmədiyinə və yaradıla bilmədiyinə əmin ol.

Məlumat formatları: JSON və XML

1C
Данные = Новый Структура;
Данные.Вставить("code", "0001");
Данные.Вставить("name", "Çay 100 q");
Данные.Вставить("price", 4);

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
ТекстJSON = Запись.Закрыть();

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Прочитано = ПрочитатьJSON(Чтение);   // Структура
Чтение.Закрыть();
Сообщить(Прочитано.name);
Gözlənilən nəticə
Çay 100 q
ЗаписатьJSON strukturu, massivi və primitiv qiymətləri sətrə çevirir, ПрочитатьJSON isə geri qaytarır.

XML üçün ЗаписьXML və ЧтениеXML obyektləri, strukturlaşdırılmış mübadilə üçün isə XDTO mexanizmi var: СериализаторXDTO kataloq elementini və ya sənədi bütöv şəkildə XML-ə yazır. Paylanmış bazalar arasında mübadilə üçün mübadilə planları (Планы обмена) dəyişiklikləri özləri izləyir; tipik konfiqurasiyalar isə bir-biri ilə EnterpriseData formatında məlumat mübadiləsi edir.

HTTP-servislər, veb-servislər və xarici API

HTTP-servis (Общие › HTTP-сервисы) 1C-ni REST API-yə çevirir. Onun kök URL-i (məsələn, shop), URL şablonları (məsələn, /items/{code}) və hər şablon üçün metodları (GET, POST…) olur. Baza veb-serverdə dərc olunandan sonra servis belə bir ünvanda cavab verir: https://server/base/hs/shop/items/0001. Hər metodun emalçısı HTTPСервисЗапрос qəbul edən və HTTPСервисОтвет qaytaran funksiyadır.

1C
// HTTP-сервис Shop, шаблон URL /items/{code}, метод GET
Функция ItemsGET(Запрос)
    Код = Запрос.ПараметрыURL["code"];
    Товар = Справочники.Товары.НайтиПоКоду(Код);
    Если Товар.Пустая() Тогда
        Возврат Новый HTTPСервисОтвет(404);
    КонецЕсли;

    Данные = Новый Структура("code, name, price", Код, Товар.Наименование, Товар.Цена);
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, Данные);

    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());
    Возврат Ответ;
КонецФункции
1C
// Вызов внешнего API из 1С
Соединение = Новый HTTPСоединение("api.example.com", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
ЗапросHTTP = Новый HTTPЗапрос("/v1/rates?base=AZN");
Ответ = Соединение.Получить(ЗапросHTTP);
Если Ответ.КодСостояния <> 200 Тогда
    ВызватьИсключение СтрШаблон("Сервис курсов вернул код %1", Ответ.КодСостояния);
КонецЕсли;

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Курсы = ПрочитатьJSON(Чтение, Истина);   // Соответствие
Чтение.Закрыть();
HTTPСоединение parametrləri: server, port, istifadəçi, parol, proksi, taym-aut (saniyə) və qorunan bağlantı (HTTPS).
ÜsulNə vaxt seçilir
HTTP-servis (REST, JSON)saytlar, mobil tətbiqlər, müasir sistemlər
Veb-servis (SOAP, WSDL)SOAP tələb edən korporativ və dövlət sistemləri; onları çağırmaq üçün WS-ссылки
OData standart interfeysikod yazmadan obyektlərə REST girişi (/odata/standard.odata/)
Mübadilə planları + XMLfiliallar, 1C bazaları arasında sinxronlaşdırma
Nümunə 2: onlayn mağaza üçün API

Sayt malın kodu ilə onun adını və qiymətini almalıdır. Servisi, cavabları və təhlükəsizliyi layihələndir.

Həllini göstər
1) HTTP-servis Shop, kök URL shop, şablon /items/{code}, metod GET, emalçı ItemsGET.
2) Cavablar: mal tapıldı — 200 və JSON {"code", "name", "price"}; tapılmadı — 404; kod boşdur — 400.
3) Təhlükəsizlik: sayt üçün ayrıca istifadəçi və yalnız Товары üzrə Чтение hüququ olan APIShop rolu; yalnız HTTPS.
4) Dərc: Администрирование › Публикация на веб-сервере, HTTP-servisləri qeyd et.
5) Yoxlama: brauzerdə və ya curl ilə https://server/base/hs/shop/items/0001 ünvanını aç.

Əsas fikirlər

  • Rollar hüquqları toplayır; qadağan edən rol yoxdur — rolları kiçik və məqsədli et.
  • RLS şərtləri Чтение/Добавление/Изменение/Удаление hüquqlarına yazılır və seans parametrlərindən istifadə edir.
  • RLS olan cədvəllərdə ВЫБРАТЬ РАЗРЕШЕННЫЕ xəta əvəzinə yalnız icazəli yazıları qaytarır.
  • JSON üçün ЗаписатьJSON/ПрочитатьJSON istifadə et; qeyri-standart açarlar üçün ПрочитатьJSON(Чтение, Истина) lazımdır.
  • HTTP-servis /hs/<kök URL>/ ünvanında REST API verir; xarici API HTTPСоединение ilə, taym-aut və HTTPS ilə çağırılır.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
İstifadəçinin iki rolu var: biri Изменение hüququ verir, digəri vermir. Nəticə nədir?