- 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üquq | Mə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 |
Если Не ПравоДоступа("Изменение", Метаданные.Документы.РасходТовара) Тогда
ВызватьИсключение "Недостаточно прав для изменения документа";
КонецЕсли;
Если РольДоступна("Бухгалтер") Тогда
// показываем дополнительные колонки
КонецЕсли;ПравоДоступа() 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.
// Модуль сеанса
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// НастройкиПользователей - наш общий модуль
ПараметрыСеанса.ТекущийСклад = НастройкиПользователей.СкладТекущегоПользователя();
КонецПроцедурыГДЕ Склад = &ТекущийСкладКладовщик 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.
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ərHəllini gizlət
Кладовщик 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
Данные = Новый Структура;
Данные.Вставить("code", "0001");
Данные.Вставить("name", "Çay 100 q");
Данные.Вставить("price", 4);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
ТекстJSON = Запись.Закрыть();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Прочитано = ПрочитатьJSON(Чтение); // Структура
Чтение.Закрыть();
Сообщить(Прочитано.name);Ç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.
// 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");
Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());
Возврат Ответ;
КонецФункции// Вызов внешнего 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).| Üsul | Nə 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 interfeysi | kod yazmadan obyektlərə REST girişi (/odata/standard.odata/) |
| Mübadilə planları + XML | filiallar, 1C bazaları arasında sinxronlaşdırma |
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ərHəllini gizlət
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/ПрочитатьJSONistifadə et; qeyri-standart açarlar üçünПрочитатьJSON(Чтение, Истина)lazımdır. - HTTP-servis
/hs/<kök URL>/ünvanında REST API verir; xarici APIHTTPСоединение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.
Изменение hüququ verir, digəri vermir. Nəticə nədir?