Kompiuteriai ir modernios programėlės

1C Enterprise 8 sistemoje šiandien mes toliau tyrinėsime teisių mechanizmą ir toliau gilinsimės į RLS mechanizmą (teisių apribojimas rekordiniu lygiu).

Žemiau apžvelgsime šio metodo privalumus ir trūkumus ir pažvelgsime į RLS nustatymą 1C Enterprise 8.3 naudojant pavyzdį.

1C RLS (Record Level Security) arba teisių apribojimas įrašymo lygiu- tai yra vartotojo teisės 1C sistemoje, leidžiančios atskirti vartotojų teises dinamiškai besikeičiančių duomenų kontekste.

Labiausiai paplitęs 1C RLS nustatymo tipas yra apriboti vartotojo matomumą organizacijose ar klientams (vartotojas mato tik „savo“ duomenis).

Pagrindinis privalumas yra tai, kad mechanizmas yra gana sudėtingas ir įdomus. Leidžia labai smulkiai atskirti vartotojų teises – vartotojai gali net nežinoti, kad sistemoje yra kitų duomenų.

1C 8 RLS trūkumai

Tarp trūkumų galima pastebėti pastebimą sistemos našumo sumažėjimą. Taip yra dėl to, kad platforma, kurdama užklausą duomenų bazėje, apsunkina bet kokį kūrėjo užklausą papildomomis sąlygomis.

Tarp trūkumų taip pat yra šios funkcijos nustatymo sudėtingumas ir derinimo sunkumai. 1C išleido labai mažai medžiagos apie šios funkcijos sąranką ir veikimą. Gana sunku rasti specialistą, kuris tinkamai nustatytų mechanizmą.

Teisių apribojimų nustatymas 1C RLS įrašo lygiu

Įrašo lygio leidimai (RLS) naudojami apriboti šių tipų teises:

  • Skaitymas
  • Papildymas
  • Keisti
  • Pašalinimas

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

Išoriškai RLS (įrašo lygio teisių) nustatymas yra panašus į paprasto . Šablono, apribojančio kliento prieigą prie dokumentų matomumo iš dokumento antraštės, pavyzdys:

##Jei &naudoti įrašo lygio prieigos teisių apribojimus ##Tada

CurrentTable FROM #CurrentTable AS CurrentTable
PRISIJUNGTI KAIRĖJE (PASIRINKITE ĮVAIRIUS
Grupės sudėtis.Link AS vartotojų grupė
NUO
Katalogas.Vartotojų grupės.UsersGroups AS Grupės sudėtis
KUR
GroupComposition.User = &DabartinisVartotojas) AS Vartotojų grupės
Programinė įranga (&UseRecord lygio prieigos teisių apribojimai)
WHERE (&UseRecordLevelPermissionRestrictions = FALSE
ARBA (NE 1 V
(PASIRINKITE TOP 1
1 KAIP PASIRINKTI
NUO
Informacijos registras Prieigos objektų tipų paskirtis AS Prieigos objektų tipų paskirtis
KUR
Prieigos tipų paskirtis Objects.UserGroup = UserGroups.UserGroup
IR PASIRINKIMAS
KAI Prieigos objektų tipų paskirtis Prieigos objekto tipas = VERTĖ (Sąrašas. Prieigos objektų tipai. Sandorio šalys)
Ir CurrentTable.#Parameter(1) LINK Directory.Counterparts
AND NOT CurrentTable.#Parameter(1) = VERTĖ(Katalogas.Paskyros.EmptyLink)
TADA PASIRINKITE
KADA 1 V
(PASIRINKITE TOP 1
1
NUO
Katalogas.Susitarimo šalys AS Rangovai INTERNAL JOIN Informacija Registras.Vartotojo prieigos teisių nustatymai AS Vartotojo prieigos teisių nustatymai
BY
UserAccessRightSettings.AccessObject = Counterparties.AccessGroupToCounterparty
Ir UserAccessRightSettings.AccessObjectType = VALUE(Sąrašas.AccessObjectTypes.Counterparties)
IR (Vartotojo prieigos teisių nustatymai. Vartotojas = Prieigos objektų tipų priskyrimas. Vartotojų grupė
ARBA UserAccessRightSettings.User = VALUE(Directory.UserGroups.AllUsers))
Ir UserAccessRightSettings.Record = TRUE
KUR
Sandorio šalys.Nuoroda = dabartinė lentelė.#Parametras(1))
TADA TIESA
KITAIP NETIESA
GALAS
KITAIP TIESA
PABAIGA = NETIESA))
IR NE UserGroups.UserGroup IS NULL)
##EndIf

Iš esmės ši užklausa pridedama kiekvieną kartą, kai pateikiama lentelė „#Dabartinė lentelė“. Iš ko galime įsivaizduoti, kokią papildomą apkrovą neša ribojimo mechanizmas rekordiniu lygiu.

Kaip matote, užklausa turi specialius parametrus, pvz., „&Naudoti prieigos teisių apribojimus įrašo lygiu“. Šie parametrai radare parenkami iš metaduomenų objektų – “ “. Paprastai jie nustatomi vartotojo seanso pradžioje.

Prieigos prie duomenų apribojimo konstruktorius

Kūrėjo patogumui 1C 8.3 turi specialią priemonę, padedančią sukonfigūruoti radarą – duomenų prieigos apribojimo dizainerį. Jis iškviečiamas iš lauko „Prieigos apribojimas“. taip:

Spausdinti (Ctrl+P)

Prieigos prie duomenų ribojimas

Prieigos prie duomenų apribojimų mechanizmas (dar žinomas kaip RLS, Row Level Security) leidžia valdyti prieigos teises ne tik metaduomenų objektų, bet ir 1C:Enterprise duomenų bazės objektų lygiu. Norint apriboti prieigą prie duomenų, galima naudoti šiuos 1C:Enterprise objektus:
● vaidmenys,
● seanso parametrai,
● funkcinės galimybės,
● privilegijuotus bendruosius modulius,
● raktinis žodis LEIDŽIAMAS užklausos kalba.
Dalijimasis išvardytais objektais suteikia maksimalų lankstumą, kai reikia atskirti prieigos prie duomenų teises tarp vartotojų, atliekančių skirtingas funkcijas.
Prieigos prie duomenų apribojimai gali būti taikomi šioms duomenų operacijoms (prieigos teisėms): skaitymui (Skaityti dešinėje), papildymui (Pridėti teisę), keitimui (Keisti teisę) ir trynimui (Ištrinti teisę). Dabartinis vartotojas galės atlikti reikiamą operaciją šiais atvejais:
● Atliekant skaitymo ir trynimo operacijas, duomenų bazėje esantis objektas turi atitikti prieigos prie duomenų apribojimą.
● Jei norite pridėti operaciją, prieigos prie duomenų apribojimas turi atitikti objektą, kurį planuojate įrašyti į duomenų bazę.
● Keitimo operacijai duomenų prieigos apribojimas turi atitikti objektą tiek prieš pakeitimą (kad objektas būtų nuskaitomas), tiek po pakeitimo (kad objektas būtų parašytas).
Taikydami prieigos prie duomenų apribojimus atminkite, kad galite nurodyti tik vieną keitimo, pridėjimo ir ištrynimo operacijų sąlygą, tačiau skaitymo operacijai galima nurodyti daugiau nei vieną duomenų prieigos apribojimą. Tai reiškia, kad skirtingų objekto laukų skaitymui gali būti nustatytos skirtingos sąlygos, o nustatant sąlygą galima nurodyti ir konkretaus lauko pavadinimą, ir specialų lauką Kiti laukai. Pirmuoju atveju sąlyga bus taikoma tik tuo atveju, jei pasirinkime (kuris nuskaito duomenis) yra laukas, kuriam nustatytas apribojimas, o antruoju atveju apribojimas bus taikomas visiems objekto laukams, išskyrus laukai, kuriems aiškiai nustatyti apribojimai.
Nustatant apribojimą konkrečiam laukui, šis laukas bus nuskaitomas, jei apribojimas tenkinamas, o nustatant apribojimą kitiems laukams, objekto duomenys bus nuskaitomi tik tuo atveju, jei apribojimas tenkinamas visuose objekto laukuose, įtrauktuose į lauką. duomenų skaitymo užklausa.
Šių tipų duomenų bazės objektams gali būti taikomi įvairūs apribojimai įvairių tipų pakeitimams (pridėjimui, keitimui, ištrynimui):
● mainų planai,
● Katalogai,
● Dokumentai,
● charakteristikų tipų planai,
● sąskaitų planai,
● Skaičiavimo tipų planai,
● Verslo procesai,
● Užduotys.
Šių tipų duomenų bazės objektams galima nustatyti ne tik viso objekto, bet ir atskirų jo laukų skaitymo apribojimus:
● mainų planai,
● Katalogai,
● Dokumentai,
● dokumentų žurnalai,
● charakteristikų tipų planai,
● sąskaitų planai,
● Skaičiavimo tipų planai,
● informacijos registrai,
● Verslo procesai,
● Užduotys.
DĖMESIO! Kai pasiekiate duomenų bazės objektų laukus naudodami programos objektų savybes iš integruotos 1C:Enterprise kalbos, skaitomas visas objektas, o ne tik naudojamo lauko reikšmė. Išimtis yra gavus rodinį, kai bus skaitomos tik laukų, susijusių su rodinio generavimu, reikšmės.
Prieigos apribojimai yra įtraukti į vaidmenis, jie gali būti nurodyti daugumai metaduomenų objektų ir yra parašyti specialia kalba, kuri yra užklausos kalbos poaibis.

Duomenų prieigos apribojimo kalba

Prieigos prie duomenų apribojimai aprašomi specialia kalba, kuri yra užklausos kalbos poaibis (išsamus užklausos kalbos aprašymas. Duomenų prieigos apribojimų kalba, palyginti su užklausos kalba, turi šiuos pakeitimus:
● Prieigos prie duomenų apribojimo užklausoje kaip duomenų šaltinis visada yra viena lentelė – tai objekto, kuriam taikomas apribojimas, lentelė (pagrindinis apribojimo objektas).
● Užklausos aprašymas buvo sutrumpintas. Prieigos prie duomenų apribojimo kalba naudoja tik užklausos kalbos skyrius FROM ir WHERE. Taigi, užklausos kalbos aprašymas atrodo taip:
PASIRINKTI [LEIDŽIAMA] [SKIRTINGAS] [ PIRMAS<Количество> ]
<Pasirinkimo laukų sąrašas>
[NUO <Список источников> ]
[KUR<Условие отбора> ]
[GRUPUOTI PAGAL <Поля группировки> ]
[TURIMAS<Условие отбора> ]
[DĖL PAKEITIMO [ <Список таблиц верхнего уровня> ]]
Nors prieigos prie duomenų apribojimo užklausos kalbos aprašymas yra toks:
[Pagrindinio apribojimo objekto lentelės slapyvardis]
[NUO <Список источников> ]
[KUR<Условие отбора> ]

Įdėtosiose užklausose, naudojamose duomenų prieigos apribojimo kalba, leidžiamų galimybių rinkinys yra ribotas;
● Seanso parametrus ir funkcines parinktis galite nurodyti kaip sąlygų elementus;
● Bet kurioje duomenų prieigos apribojimo užklausoje leidžiama naudoti šablonus, kurie supaprastina rašymo apribojimus.
Pagrindinė apribojimo dalis yra sąlyga, kuri įvertinama kiekvienam duomenų bazės lentelės įrašui, kuriam taikomas prieigos prie duomenų apribojimas. Įrašas laikomas prieinamu, jei vykdant sąlygą vienam pagrindinio apribojimo objekto lentelės įrašui gaunama netuščia lentelė (tai yra lentelė su 1 ar daugiau įrašų). Jei sąlyga lemia tuščią lentelę, įrašas, kurio sąlyga buvo įvykdyta tokiu būdu, laikomas nepasiekiamu. Be to, keičiant pagrindinio apribojimo objekto lentelės įrašą
laikomas galiojančiu, jeigu įrašas neprieštarauja teisei nurodytam apribojimui tiek prieš, tiek po modifikavimo operacijos atlikimo.

Lentelės laukai

Duomenų prieigos apribojimuose galite naudoti:
● Objekto, kuriam aprašytas prieigos prie duomenų apribojimas, lentelės laukai.
Pavyzdžiui, jei ribojamas sandorių šalių katalogo elementų skaitymas, tada apribojimas gali naudoti sandorio šalių katalogo laukus ir jo lentelių dalis. Konkrečiai, paprasčiausi sandorių šalių katalogo elementų skaitymo apribojimai gali atrodyti taip:

KUR pavadinimas = „plytų gamykla“
Arba taip:

KUR Produktai.Vardas= "Plyta raudona"
Kur Produktai yra lentelinė rangovų katalogo dalis.
● Objektų lentelių laukai, pasiekiami per pagrindinio apribojimo objekto nuorodas.
Pavyzdžiui, jei rangovų katalogo atributas Pagrindinis valdytojas turi nuorodos tipą į katalogą Vartotojai, tada prieigos apribojimas gali turėti, pavyzdžiui, tokią formą:

KUR MainManager.Code= "Ivanovas"
Arba:

KUR Pagrindinis vadovas.Asmuo.Vardas= "Petrovskis"
● Objektų lentelių laukai, susieti su pagrindiniu apribojimų objektu tam tikromis sąlygomis ir jų išraiškomis.
Pavyzdžiui, sandorio šalių katalogo elementų skaitymui gali būti taikomas toks apribojimas:

Sandorio šalys
NUO
Katalogas.Darbo šalys KAIP Sandorio šalys
KAIRIS RYŠYS Katalogas.Vartotojai KAIP Vartotojai
Programinė įranga = Vartotojai.Vardas
KUR = "Petrovsky"
Šis apribojimas naudoja Vartotojų katalogo elementų laukus, susietus su šiuo katalogo Counterparties elementu pagal laukų Name reikšmę.

Įdėtos užklausos

Įdėtos užklausos naudojamos įrašų rinkiniams, kuriuos galima naudoti, formuoti:
● susieti su pagrindinio apribojimo objekto lentele;
● naudoti kaip operandą B arba NE B palyginimo operacijoms.
Įdėtosiose užklausose gali būti naudojamos bet kokios užklausos kalbos funkcijos, išskyrus:
● operatorius HIERARCHIJOJE;
● REZULTATŲ pasiūlymai;
● įdėtųjų užklausų rezultatuose neturėtų būti lentelės dalių;
● kai kurios virtualios lentelės, ypač Likučiai ir apyvartos.
Šiame pavyzdyje, kaip apriboti skaitymą iš sąskaitų katalogo, antrinė užklausa naudojama kaip įrašų rinkinys, susietas su pagrindiniu apribojimo objektu:

Sandorio šalys
NUO
Katalogas.Darbo šalys KAIP Sandorio šalys
KAIRIS RYŠYS
(PASIRINKTI
Vartotojai.Vardas, Vartotojai.Asmuo
NUO
Katalogas.Vartotojai KAIP Vartotojai
KUR
Vartotojai.Kodas> „Petechkin“) AS vartotojai
BY Sandorio šalys = Vartotojai.Vardas
KUR Vartotojai.Asmuo.Vardas= "Petrovskis"
Šiame pavyzdyje parodytas apribojimas skaityti iš asmenų paso duomenų katalogo, kuriame naudojama įdėta užklausa
kaip palyginimo operacijos B operandas:

KUR
Paso duomenysIndividual.Individual IN
(PASIRINKTI ĮVAIRIUS
Darbininkai.Individualus KAIP ASMENYS
NUO
Informacijos registras.Darbuotojai KAIP DARBUOTOJAI)
Jei įdėtoje užklausoje reikia gauti duomenis iš lentelės dalies, tai įdėtosios užklausos skiltyje FROM turite tiesiogiai pasiekti lentelės dalį. Pavyzdžiui, vietoj:

PASIRINKITE nuorodą AS Link,
Produktai.Vardas KAIP Produkto pavadinimas
NUO Katalogas.Darbo šalys
kaip užklausą, įdėtą į apribojimą, turėtumėte naudoti:

Seanso parinktys

Prieigos prie duomenų apribojimo užklausos gali apimti seanso parametrus. Pavyzdžiui, skaityti katalogo elementus El. pašto grupės Galima nustatyti šiuos prieigos apribojimus:

KUR Owner.AccountAccess.User = &Dabartinis naudotojas
IR Savininkas.Prieiga.Administravimas= TIESA

CurrentUser yra seanso parametras

Funkcinės parinktys

Prieigos prie duomenų apribojimo užklausos gali apimti funkcines parinktis. Galima naudoti tik nuo parametrų nepriklausomas funkcines parinktis. Pavyzdžiui, jei kataloge Items yra atributas MainWarehouse, šio atributo skaitymo apribojimas gali atrodyti taip:

KUR &Sandėlio apskaita = TRUE

Kur Sandėlio apskaita yra funkcionalus pasirinkimas

Naudojimo ypatybės

Ne visi pagrindinio suvaržymo duomenų objekto laukai gali būti naudojami apribojant šių tipų duomenų bazės objektus:
● kaupimo registruose prieigos apribojimuose gali būti tik pagrindinio apribojimo objekto išmatavimai;
● apskaitos registruose apribojimuose gali būti naudojami tik pagrindinio apribojimo objekto balansiniai matavimai.
PASTABA. Jei ribotos prieigos prie apyvartos kaupimo registro duomenų sąlygomis naudojami matavimai, kurie neįtraukti į sumas, tada
Prieinant prie virtualios apsisukimų lentelės, saugomos sumos nenaudojamos, o užklausa atliekama visiškai pagal judėjimo lentelę.

Prieigos apribojimo veiksmai

Prieigos apribojimai tikrinami, kai atliekamos atitinkamos operacijos su duomenų bazės objektais (iš dialogo langų, iš integruotos kalbos, per užklausas) ir gali veikti vienu iš dviejų būdų:
● Viskas. Metodas „visi“ reiškia, kad kai kurios operacijos su duomenimis (iš dialogo langų, iš integruotos kalbos arba per užklausas) turi būti atliekamos su visais šios operacijos numanomais duomenų bazės objektais. Jei tokiai operacijai reikia nuskaityti arba modifikuoti duomenų bazės objektus, kuriems nesilaikoma atitinkamų prieigos apribojimų, operacija nutraukiama
nenormalus dėl prieigos pažeidimo.
● Leidžiama. „Leidžiamas“ metodas reiškia, kad atliekant operaciją su duomenimis turi būti nuskaitomi tik tie duomenų bazės objektai, kurie atitinka atitinkamus prieigos apribojimus. Duomenų bazės objektai, kurie neatitinka prieigos apribojimų, laikomi trūkstamais atliekant tokią operaciją ir neturi įtakos operacijos rezultatui.
Prieigos prie duomenų apribojimai taikomi duomenų bazės objektams tuo metu, kai „1C:Enterprise“ pasiekia duomenų bazę. 1C:Enterprise kliento-serverio versijoje apribojimai taikomi 1C:Enterprise serveriui.
Kiekvienai duomenų operacijai atlikti pasirinktų apribojimų veikimo būdą lemia šios operacijos tikslas ir atsakomybės už jos rezultatus laipsnis. Visų pirma, „leidžiamas“ metodas naudojamas rodant dinaminius sąrašus ir kai kuriuos kitus interaktyvius veiksmus. Metodas „visi“ naudojamas atliekant bet kokias operacijas su taikomųjų programų objektais iš integruotos 1C:Enterprise kalbos, įskaitant bet kokius duomenų bazės objektų pakeitimus. Todėl, pavyzdžiui, gali kilti sunkumų sudarant katalogų, dokumentų ir kitų tvarkytojų metodo Select() pasirinkimą, vėliau apeinant rezultatą, jei atitinkamam objektui nustatytas gana sudėtingas apribojimas, nes ne visos sąlygos prieigos teisių apribojimas gali būti tinkamai pavaizduotas kaip Select() metodo pasirinkimas.
Užklausose galite valdyti, kaip veikia duomenų prieigos apribojimai. Šiuo tikslu užklausos kalba pateikia raktinį žodį LEIDŽIAMAS. Jei užklausoje nenurodyta LEIDŽIAMA, tada apribojimai taikomi „visi“. Jei nurodytas žodis LEIDŽIAMAS, pasirenkamas metodas „leidžiamas“.
Svarbu, kad jei užklausoje nenurodytas raktinis žodis LEIDŽIAMAS, visi toje užklausoje nurodyti pasirinkimai neturi prieštarauti jokiems užklausoje naudojamų duomenų bazės objektų skaitymo apribojimams. Be to, jei užklausoje naudojamos virtualios lentelės, atitinkami pasirinkimai turi būti taikomi pačioms virtualioms lentelėms.
Pavyzdys:

PASIRINKTI
Kontaktinės informacijos skyriusPirma.Įvadas
NUO RegisterInformation.ContactInformation.SliceLast(, tipas = &tipas)
KAIP ContactInformationSliceFirst
KUR
ContactInformationSliceFirst.Type = &Tipas
Naudojant objekto technologiją, prieiga prie duomenų LEIDŽIAMO režimu nepalaikoma. Daroma prielaida, kad objektų technologija naudojama svarbiausioms duomenų operacijoms, įskaitant jų keitimą. Norėdami gauti visus duomenis naudodami objektų technologiją, nepaisant nustatytų apribojimų, galite atlikti reikiamus veiksmus privilegijuotajame modulyje arba vartotojo, turinčio visas teises, vardu. Objektų technologijoje nėra priemonių gauti tik leidžiamus duomenis.

Apribojimų nustatymo mechanizmas

Bet kokia operacija su duomenimis, saugomais duomenų bazėje 1C: Enterprise, galiausiai suteikia prieigą prie duomenų bazės
prašyti perskaityti ar pakeisti duomenis. Vykdant užklausas į duomenų bazę, vidiniai 1C:Enterprise mechanizmai nustato prieigos apribojimus. Kur:
● Sugeneruojamas teisių sąrašas (skaityti, pridėti, keisti, ištrinti), duomenų bazės lentelių sąrašas ir šioje užklausoje naudojamų laukų sąrašas.
● Iš visų dabartinio vartotojo vaidmenų pasirenkami duomenų prieigos apribojimai visoms teisėms, lentelėms ir laukams, susijusiems su užklausa. Be to, jei vaidmuo neapima prieigos prie lentelės ar lauko duomenų apribojimų, tai reiškia, kad šioje lentelėje yra bet kurio įrašo būtinų laukų reikšmės. Kitaip tariant, prieigos prie duomenų apribojimų nebuvimas reiškia apribojimų buvimą
KUR yra Tiesa.
● Nuskaito visų seansų parametrų ir funkcinių parinkčių, susijusių su pasirinktais apribojimais, dabartines reikšmes.
Norint gauti seanso parametro vertę, dabartinis vartotojas neturi turėti leidimo gauti tą reikšmę. Tačiau jei kurio nors seanso parametro reikšmė nenustatyta, įvyks klaida ir duomenų bazės užklausa nebus vykdoma.
Funkcinių parinkčių gavimui įtakos turi funkcinės parinkties privilegijuotas režimas gavus.
Jei ši savybė išvalyta, dabartinis vartotojas turi turėti skaitymo prieigą prie objekto, kuriame saugoma funkcijos parinktis.
● Apribojimai, gauti iš vieno vaidmens, sujungiami naudojant operaciją IR.
● Apribojimai, gauti iš skirtingų vaidmenų, derinami naudojant ARBA operaciją.
● Sukurtos sąlygos pridedamos prie SQL užklausų, su kuriomis 1C:Enterprise pasiekia DBVS. Prieinant prie duomenų iš prieigos apribojimo sąlygų, teisių patikra neatliekama (nei metaduomenų objektams, nei duomenų bazės objektams). Be to, sąlygų pridėjimo mechanizmas priklauso nuo pasirinkto apribojimų „visi“ arba „leistini“ veikimo būdo.
"Viskas" metodas
Nustatant apribojimus naudojant „visų“ metodą, sąlygos ir laukai pridedami prie SQL užklausų, kad „1C:Enterprise“ galėtų gauti informacijos apie tai, ar vykdant duomenų bazės užklausą buvo naudojami tam tikram vartotojui draudžiami duomenys, ar ne. Jei buvo naudojami draudžiami duomenys, užklausa sugenda. Prieigos apribojimų nustatymas naudojant „visų“ metodą schematiškai parodytas fig. 1:

Ryžiai. 1. „Viskas“ metodas

„Leidžiamas“ metodas
Taikant apribojimus naudojant „leidžiamą“ metodą, į SQL užklausas įtraukiamos sąlygos, kad dabartiniam vartotojui draudžiami įrašai neturėtų įtakos užklausos rezultatui. Kitaip tariant, kai apribojimai įvedami „leidžiamu“ režimu, tam tikram vartotojui draudžiami įrašai laikomi trūkstamais, o tai schematiškai parodyta 3 pav.

Kiti objektai, susiję su duomenų prieigos apribojimais

Kuriant konfigūracijas, kuriose naudojami duomenų prieigos apribojimai, gali būti naudingi metaduomenų objektai, tokie kaip seanso parametrai, funkcinės parinktys ir bendrinami moduliai su privilegijuota vėliava.
Seanso parinktys
Seanso parametrai gali būti naudojami duomenų prieigos apribojimuose taip pat, kaip užklausos parametrai gali būti naudojami užklausoje.
Funkcinės parinktys
Nuo parametrų nepriklausomos funkcinės parinktys gali būti naudojamos duomenų prieigos apribojimuose taip pat, kaip užklausoje gali būti naudojami užklausos parametrai.
Privilegijuotieji bendrieji moduliai

Jei bendram moduliui pasirenkama Privilegijuota vėliavėlė, tai šio modulio procedūrų ir funkcijų vykdymas įgauna svarbios specifikos:
● 1C:Enterprise kliento-serverio versijoje privilegijuotas gali būti tik tas modulis, kuris vykdomas serveryje.
● Privilegijuoto modulio procedūrų ir funkcijų vykdymas bei viskas, kas iš jų iškviečiama, atliekama išjungus apribojimų sistemą.
teisės tiek į metaduomenų objektus, tiek į duomenis. Taigi iš privilegijuoto modulio galima atlikti bet kokią operaciją
bet kokius objektus, net jei dabartinis vartotojas neturi atitinkamų teisių.
Privilegijuotieji moduliai yra skirti iš pradžių nustatyti seanso parametrų reikšmes, naudojamas duomenų prieigos apribojimuose.
Bendresni moduliai gali būti naudojami kai kuriems holistiniams veiksmams su duomenimis, kuriuos atlieka vartotojas, turintis ribotas teises.
Pavyzdžiui, jei vartotojo funkcijos apima dokumentų įvedimą ir paskelbimą, bet vartotojas neturėtų turėti prieigos prie duomenų, kuriems įtakos turi dokumentų registravimas, tada registravimo operacijos vykdymas gali būti perkeltas į privilegijuotąjį modulį. Tai leis vartotojui skelbti dokumentus nesuteikiant jam teisių į kitą informaciją (pavyzdžiui, registrus).
Privilegijuotas režimas
Galima programiškai įdiegti privilegijuotą režimą dirbant su duomenimis. Privilegijuoto režimo nustatymas programiškai
gali prireikti atliekant masines operacijas su informacijos bazės duomenimis, todėl nėra prasmės tikrinti duomenų prieigos teises.
Privilegijuoto režimo aprašymą rasite čia.

Naudojant išankstinį procesorių

Redaguojant duomenų prieigos apribojimų tekstą, galima naudoti išankstinio procesoriaus instrukcijas. Galimos šios instrukcijos:

#IF<Выражение>#TAI
#ELSEIF<Выражение>#TAI
#KITAIP
#ENDSIF
<Выражение>– savavališka loginė išraiška integruotoje kalboje, kurios rezultatas yra Būlio tipo. Išraiškoje gali būti:
● palyginimo operacijos<, >, <=, >= , =, <> ;
● loginės operacijos AND, OR, NOT;
● seanso parametrai – naudojama sintaksė &Parametras, kur Parametras yra seanso parametro pavadinimas.
Jei #IF arba #ELSEIF teiginio išraiškos rezultatas yra True, tada gautame prieigos apribojimo sakinio tekste yra tekstas, esantis po raktinio žodžio #THEN. Jei išraiškos rezultatas yra False, tada tekstas, esantis po raktinio žodžio #THEN, nėra įtrauktas į prieigos apribojimo instrukcijos tekstą. Tekstas po teiginio #ELSE bus įtrauktas į gautą prieigos apribojimo tekstą, jei neįvykdyta nė viena iš ankstesnių sąlygų.
PASTABA. Jei prieigos prie duomenų apribojimo tekste yra išankstinio procesoriaus instrukcijos, tai redaguojant toks apribojimas nepraeina sintaksės tikrinimo ir jo negalima pakeisti naudojant konstruktorių.
Pavyzdys:

#JEI &dabartinis vartotojas<>„Klimova“ #TAI
<текст ограничения доступа>
#ENDSIF
Čia Dabartinis vartotojas– seanso parametro tipas DirectoryLink.Users.
Šis dizainas reiškia, kad prieigos apribojimo nustatymo sąlyga bus tikrinama visiems vartotojams iš katalogo, išskyrus vartotoją Klimova.

Prieigos apribojimo teksto šablonai

Vaidmenyje gali būti prieigos apribojimų šablonų sąrašas, aprašytas vaidmens formos skirtuke Apribojimų šablonai. Redagavimo priemonėje taip pat galite redaguoti prieigos apribojimų šablonus, skirtus prieigos apribojimų ir šablonų grupiniam redagavimui.
Kiekvienas prieigos apribojimo šablonas turi pavadinimą ir tekstą. Šablono pavadinimas atitinka įprastas pavadinimų taisykles, priimtas sistemoje 1C:Enterprise.
Šablono tekste yra dalis teksto duomenų prieigos apribojimo kalba ir gali būti parametrų, kurie paryškinti naudojant simbolį
“#”.
Po simboliu “#” gali sekti:
● Vienas iš raktinių žodžių:
● Parametras, po kurio nurodomas parametro numeris šablone skliausteliuose;
● CurrentTable – nurodo įterpimą į tekstą pilno lentelės, kuriai kuriamas apribojimas, pavadinimo;
Dabartinės lentelės pavadinimas– žymi įterpimą į tekstą pilno lentelės pavadinimo (kaip eilutės reikšmė, kabutėse), kuriai taikoma instrukcija, dabartinėje integruotos kalbos versijoje;
●Name of CurrentAccessRight – yra teisės, kuriai taikomas dabartinis apribojimas, pavadinimas: SKAITYTI/PRIDĖTI/Įterpti/KEISTI/
ATNAUJINTI, IŠTRINTI;
● šablono parametro pavadinimas – reiškia atitinkamo šablono parametro apribojimo įterpimą į tekstą;
● „#“ simbolis – rodo vieno „#“ simbolio įterpimą į tekstą.

Prieigos apribojimo išraiškoje gali būti:

● Prieigos apribojimo šablonas, kuris nurodytas formate
#TemplateName („1 šablono parametro vertė“, „2 šablono parametro vertė“, ...). Kiekvienas šablono parametras yra parašytas dvigubomis kabutėmis. Jei parametro tekste reikia nurodyti dvigubą kabutę, turite naudoti dvi dvigubas kabutes.
● Funkcija Puslapyje yra (kur mes ieškome, ko mes ieškome). Funkcija skirta ieškoti WhatWeLook eilutės eilėje WhereWeLook. Grąžina True, jei įvykis rastas, o false kitu atveju.

● Eilučių sujungimo operatorius +.
Kad būtų lengviau redaguoti šablono tekstą, vaidmens formos skirtuke Apribojimų šablonai spustelėkite mygtuką Nustatyti šablono tekstą. Atsidariusiame dialogo lange įveskite šablono tekstą ir spustelėkite Gerai.
Sistema 1C:Enterprise tikrina šablonų tekstų sintaksę, tikrina šablonų naudojimo sintaksę ir makrokomandomis pakeičia vaidmenų prieigos apribojimo šablonų tekstus į užklausos tekstą.
Makrokomandos šablono pakeitimas yra:
● šablono tekste esančių parametrų pakeitimas parametrų reikšmėmis iš šablono naudojimo apribojimo tekste išraiškos;
● šablono naudojimo išraiškos pakeitimas užklausos tekste gautu šablono tekstu.
Kai iškviečiate užklausos konstruktorių dėl sąlygos, kurioje yra prieigos apribojimo šablonų, pateikiamas įspėjimas, kad visi šablonai bus pakeisti.
Toliau pateikiami apribojimų šablonų pavyzdžiai:

Norint lanksčiai valdyti vartotojų prieigą prie duomenų pagal funkcionalumą nustatant prieigos prie duomenų apribojimus, rekomenduojama
laikykitės šių principų:
● Būtina pasirinkti informacijos rinkinį (gali priklausyti nuo esamo vartotojo), kuriam tinkamas išankstinis pasiruošimas. Pasirinkta informacija, viena vertus, turėtų kiek įmanoma supaprastinti prieigos prie duomenų apribojimus, kita vertus, neturėtų būti per didelė. Paskirstykite jį pagal seanso parametrus.
● Seanso modulio SetSessionParameters() tvarkyklėje nustatykite seanso parametrų reikšmes.
● Nustatykite prieigos apribojimus tiems duomenims, kuriems tai yra pagrįsta (duomenys yra slapti arba svarbiausi sistemos vientisumui palaikyti). Atminkite, kad prieigos apribojimų nustatymas gali sulėtinti prieigą prie šių duomenų. Pernelyg sudėtingi apribojimai taip pat gali sulėtinti.
● Jei reikia užtikrinti, kad tam tikrą ribotą operacijų skaičių su duomenimis atliktų vartotojas, kuriam nepraktiška suteikti visiškos prieigos prie šių duomenų, perkelkite šiuos veiksmus į privilegijuotus modulius arba aiškiai įjunkite ir išjunkite privilegijuotąjį režimą atitinkamas vietas programos kode.
● Duomenų prieiga įvairiems sistemos atliekamiems patikrinimams rašant objektus atliekama privilegijuotu režimu.

Tai leidžia neišjungti įrašo lygio leidimo apribojimų atitinkamiems laukams, jei konfigūracija veikia su šiais duomenimis
planuojama tik valdomu režimu:

● katalogams tikrinant pirminį kodą, savininką ir kodo unikalumą;
● dokumentams, verslo procesams ir užduotims tikrinant numerio unikalumą;
● išjungtas mainų planams tikrinant kodo unikalumą;
● sąskaitų planams ir būdingų tipų diagramoms tikrinant pirminį kodą ir kodo unikalumą.

Kuriant duomenų apribojimo užklausą reikia atsiminti kai kuriuos apribojimus ir svarstymus:

● Jei objekto lentelei nurodyti duomenų prieigos apribojimai ir duomenų užklausoje naudojamas sujungimas su tokia lentele, tai ryšio sąlygoje (programinės įrangos užklausos skyriuje) negalima naudoti objekto lentelės dalies su nurodytu prieigos apribojimu. .
● Jei užklausoje nurodoma lentelė, kurioje užklausoje nenaudojami jokie laukai, tada šiai lentelei taikomi visi duomenų prieigos apribojimai. Pavyzdžiui, prašyti PASIRINKITE KIEKĮ(*) IŠ katalogo.Sąlygų šalys bus vykdomas atsižvelgiant į visus prieigos apribojimus, nurodytus Testo kataloge. Apribojimai nustatomi „ARBA“. Tai reiškia, kad visi įrašai, kurie yra prieinami esant bent vienai sąlygai, bus prieinami. Jei kai kuriems laukams sąlygos nenurodytos, užklausa bus vykdoma visiems lentelės įrašams.
Jei užklausoje naudojama aukščiausio lygio lentelė, įdėtųjų lentelių stulpeliams nurodyti apribojimai nėra taikomi.
Jei užklausoje naudojama įdėta lentelė, apribojimai taikomi ir įdėtai, ir aukščiausio lygio lentelei.
Pavyzdžiui, prašyti PASIRINKITE KIEKĮ(*) IŠ Katalogo.Sąskaitos šalys.Sutartys bus vykdomas atsižvelgiant į visus Sutarties šalių katalogo apribojimus, taip pat į apribojimus, susijusius su Sutarties lentelės dalimi.

● Jei prieiga prie laukų, reikalingų norint gauti nuorodos metaduomenų objekto atvaizdą, neleidžiama dėl prieigos apribojimų
duomenų ar prieiga prie objekto yra uždrausta prieigos teisių lygiu, tada tokio objekto atvaizdo gavimas neturi įtakos dabartinės operacijos eigai.

Prieigos prie duomenų apribojimo konstruktorius

Norėdami iškviesti konstruktorių duomenų prieigos apribojimų lentelės lauke stulpelyje Prieigos apribojimai, turite pereiti į redagavimo režimą ir
Spustelėkite pasirinkimo mygtuką ir atsidariusioje formoje spustelėkite mygtuką Užklausų kūrimo priemonė….
Ekrane rodoma konstruktoriaus forma:


Ryžiai. 3. Apribojimų kūrėjo skirtukas „Lentelės ir laukai“.

Jos pagalba sukuriamos sąlygos duomenų prieigos apribojimams nustatyti.
Skirtuke Lentelės ir laukai sąraše Duomenų bazė pasirinkite reikiamus objektus ir perkelkite juos į sąrašą Lentelės. Jei nurodytos kelios lentelės, skirtukas Nuorodos pridedamas prie dizainerio formos.


Ryžiai. 4. Apribojimų kūrėjo skirtukas „Nuorodos“.

Skirtuke Nuorodos sudaromos sąlygos, kurios nustatomos nuorodoms tarp lentelės laukų. Norėdami įvesti naują sąlygą, spustelėkite mygtuką Pridėti ir pasirinkite vieną iš lentelių stulpelyje Table1. Stulpelyje Table2 pasirinkite lentelę, kurios laukai yra susiję su pirmosios laukeliais. Po sąlygų sąrašu yra valdikliai, kuriuos galima naudoti kuriant lentelių susiejimo sąlygą.
Jei pasirenkamas paprastas sąlygos tipas, tada 1 lauke ir 2 lauke pasirenkami atitinkami nurodytų lentelių laukai ir nustatoma palyginimo sąlyga. Jei pasirenkami laukai, kurie nėra lyginami, tada sąlygų sąrašo eilutėje stulpelio Nuoroda sąlyga rodomas tekstas: Neteisingai užpildyta sąlyga.
Jei reikia, skirtuke Sąlygos turite nurodyti sąlygas, kuriomis bus atrenkami šaltinio duomenys.


Ryžiai. 5. Apribojimų kūrėjo skirtukas „Sąlygos“.

Kiekviename pasirinktame lauke turite pasirinkti sąlygos tipą ir nurodyti parametro pavadinimą. Seanso parametras gali būti naudojamas kaip parametras. Leidžiamos kelios sąlygos. Tokiu atveju sąlygų lentelės lauko stulpelyje Sąlyga sąlygos tekstas rodomas keliomis eilutėmis.
Užklausos kūrimo metu bet kuriuo metu užklausos tekstą galima peržiūrėti paspaudus mygtuką Prašyti.

Leidimų apribojimų ir šablonų paketinis redagavimas

Prieigos teisių apribojimų ir šablonų grupinio redagavimo režimas iškviečiamas šakos Vaidmenys kontekstinio meniu komanda Visi prieigos apribojimai. Atsidariusioje formoje yra du skirtukai: prieigos apribojimai ir apribojimų šablonai.


Ryžiai. 6 Visi leidimų apribojimai ir šablonai

Ant žymės Prieigos apribojimai Visus įvestus prieigos apribojimus galite peržiūrėti bendrame sąraše (visiems vaidmenims, objektams, teisėms, laukų deriniams).
Galima vienu metu pridėti prieigos apribojimus keliems vaidmenims, objektams, teisėms ir vaidmenų deriniams.
Galite filtruoti sąrašą pagal įvairius kriterijus.


Ryžiai. 7. Prieigos apribojimų pasirinkimas

Grupės redagavimo režimas leidžia ištrinti sąraše pasirinktus apribojimus.
Galima redaguoti pasirinktus apribojimus. Tokiu atveju galite pakeisti laukų sudėtį ir (arba) prieigos apribojimus.
Grupės redagavimo režimas taip pat leidžia kopijuoti pasirinktus apribojimus į kitus vaidmenis.

Ant žymės Apribojimų šablonai galite matyti visus programos sprendime esančius prieigos apribojimų šablonus, o iš paties šablono teksto lentelėje rodomos tik pirmosios 10 eilučių, kurios baigiasi simboliu „…“, jei šablono tekstas yra ilgesnis nei 10 eilučių. Šablono redagavimo lange bus rodomas visas šablono tekstas.


8 pav. Visi prieigos apribojimų šablonai

Galima pridėti prieigos apribojimo šabloną keliems vaidmenims vienu metu.

RLS- tai kūrėjo galimybė nustatyti sąlygas duomenų bazių lentelėse tam tikriems vartotojams (vartotojų grupėms) ir neleisti jiems matyti nereikalingų dalykų. Sąlyga yra loginio tipo. Jei sąlyga įvertinama kaip teisinga, tada prieiga suteikiama, kitu atveju ji uždrausta.

RLS naudojamas kartu su įprastų prieigos teisių nustatymu. Todėl prieš pradėdami konfigūruoti RLS, turite priskirti įprastas teises konfigūracijos objektams.

RLS naudojamas šių tipų prieigos teisėms:

  • Skaitymas
  • Papildymas
  • Keisti
  • Pašalinimas

Kaip sukonfigūruoti RLS

Pažvelkime į paprastą pavyzdį, kaip jį sukonfigūruoti. Ekrano kopijos darytos naudojant 1C Enterprise 8.2 (8.2.9.356) versiją. Apribojimų teksto šablonų sintaksė aprašyta 8.2 dokumentacijoje knygoje „Kūrėjo vadovas. 1 dalis“, todėl prie jos nesigilinsime.

Taigi, pirmas žingsnis yra apibrėžti apribojimų šablonus kiekvienam esamam vaidmeniui.

Po to, remiantis nurodytais šablonais, reikiamiems objektams nustatomi apribojimai. Norėdami redaguoti sąlygos tekstą, galite naudoti duomenų prieigos apribojimų dizainą.

Norint redaguoti kelis vaidmenis, patogu tvarkyti per langą „Visi vaidmenys“.

Norėdami nukopijuoti sąlygas į kitus vaidmenis, galite naudoti langą Visateisės prieigos apribojimai. Šablonus galima nukopijuoti tik rankiniu būdu į kitus vaidmenis.

Tai viskas. Galite patikrinti rezultatą.

RLS naudojimo trūkumai:

  1. Prieigos ribojimo mechanizmo naudojimas įrašo lygiu netiesiogiai padidina užklausoje dalyvaujančių lentelių skaičių, o tai gali sukelti duomenų bazės kliento-serverio režimo klaidų.
  2. Gali būti sunku arba neįmanoma įgyvendinti sudėtingos programos logikos rašymo valdymui. Tokiais atvejais procedūroje OnWrite() geriau naudoti sąlygas.
  3. Sąlygos (užklausos) rašymas reikalauja tam tikros kūrėjo kvalifikacijos.
  4. Papildomų sunkumų gali kilti dėl nesugebėjimo derinti sąlygos (užklausos).

Įprastose konfigūracijose teises įrašo lygiu galima interaktyviai nustatyti šiems objektams: organizacijoms, sandorio šalims, prekėms, sandėliams, padaliniams, asmenims, kandidatinėms programoms ir kitiems.

Reikėtų prisiminti, kad prieigos teisių apribojimai įrašo lygiu yra gana daug išteklių reikalaujantis mechanizmas, ir kuo sudėtingesni apribojimai bus nustatyti, tuo lėčiau programa veiks, ypač esant didelei duomenų bazei.

Aštuntoji platformos „1C: Enterprise“ versija (šiandien 8.3) padarė daug pakeitimų, susijusių su „septyniomis“, tarp kurių ypač pasižymėjo prieigos teisių apribojimo mechanizmas rekordiniu lygiu. Nepaisant to, kad teoriškai galima apsieiti ir be jo, naudojant tik vaidmenis, RLS leidžia pasiekti tikslesnius prieigos nustatymus. Tačiau norėdami tinkamai valdyti šį mechanizmą, turite aiškiai suprasti jo esmę ir turėti pakankamai patirties kuriant 1C.

Kas yra RLS?

Šios funkcijos esmė yra kūrėjo galimybė neleisti konkrečiam vartotojui ar vartotojų grupei pasiekti lenteles ar duomenų bazės lentelių laukus. Paprastai apribojimai naudojami tam, kad 1C vartotojai negalėtų matyti ir redaguoti konfidencialios, slaptos informacijos, pavyzdžiui, apriboti į grupę įtrauktos įmonės darbuotojus peržiūrėti tik savo organizacijos dokumentus. Be to, prieigos teisių apribojimo mechanizmas įrašo lygiu gali būti naudojamas nereikalingai informacijai pašalinti iš sąsajos.

Kad galėtumėte rašyti užklausas dėl RLS apribojimų, turite sukurti vaidmenį arba pasirinkti esamą. RLS nustatymas 1C 8.3 gali būti naudojamas šiems vartotojo veiksmams:

  • Papildymas;
  • Skaitymas;
  • Ištrinti;
  • Keisti.

Be plačiausių prieigos pritaikymo galimybių, RLS turi ir trūkumų:

  1. Reikalavimai kūrėjo kvalifikacijai, nes prašymas turės būti parašytas įtaisyta kalba, atsižvelgiant į sintaksės taisykles;
  2. Gebėjimo greitai derinti sąlygas trūkumas;
  3. Ribotos logikos apibūdinimo galimybės: dokumentų ir žinynų moduliuose vis tiek teks rašyti pernelyg sudėtingas sąlygas;
  4. Duomenų bazės kliento-serverio versijoje galimas numanomas į užklausą įtrauktų lentelių augimas. Be to, labai sunku sekti šį procesą;
  5. Reikalavimai ištekliams. RLS apribojimai sunaudoja daug energijos kliento kompiuteryje ir serveryje;
  6. Laisvai prieinama nedaug dokumentų.

Kita problema, kuri gali kilti nustačius 1C RLS, gali būti ataskaitos. Faktas yra tas, kad kūrėjai numato galimus RLS apribojimus ir kuria ataskaitas taip, kad jose būtų rodomi tik leidžiami duomenys. Jei naudotojai sukonfigūravo skirtingus RLS apribojimus, tų pačių parametrų ataskaitos duomenys gali skirtis. Dėl to gali kilti klausimų, todėl kurdami ataskaitas ar rašydami užklausas RLS, turite į šias situacijas atsižvelgti.

Sukurkite RLS apribojimą

Norėdami pridėti RLS apribojimą, turite rasti norimą vaidmenį ir atidaryti jį dukart spustelėdami.

Atsidariusiame lange yra 2 skirtukai: „Teisės“ ir „Apribojimų šablonai“. Norėdami nustatyti tam tikrus apribojimus konkrečiam veiksmui, turite jį pasirinkti ir spustelėti žalią pliusą apatinėje dešinėje dalyje. Atsiras eilutė, kurioje galime nustatyti 1C RLS apribojimus kalba, kuri yra integruota į 1C.


Jei žinote 1C sintaksę (pvz., savo ranką), galite rašyti tiesiai į lauką „Prieigos apribojimas“. 1C kūrėjai suteikė galimybę atidaryti užklausos konstruktorių, kuris padės ir pasiūlys, kokius apribojimus galima padaryti. Norėdami jį atidaryti, turite spustelėti mygtuką su trimis taškais (Pasirinkti) arba F4 ir pasirodys langas su mygtuku „Užklausų kūrimo priemonė…“.


Atsidariusiame lange galite sukonfigūruoti apribojimus ne tik šiam katalogui, bet ir kitiems sistemos objektams. Norėdami tai padaryti, turite juos įtraukti į skirtuką "Lentelės ir laukai". Užregistruojame „Nomenklatūros“ katalogo laukelių apribojimus ir spaudžiame „Gerai“. Būkite atsargūs dėl kintamųjų pavadinimų: RLS parametrai nustatomi vartotojo seanso pradžioje ir turi būti metaduomenų objekte.


Skirtuke „Apribojimų šablonai“ nurodote užklausas, kurios būtinos kopijuojant tuos pačius RLS nustatymus į 1C 8.3. Pridėję šabloną galite naudoti jo pavadinimą prieigos teisių nustatymuose.

Taip pat galima vienu metu pridėti apribojimų keliems vaidmenims. Norėdami tai padaryti, konfigūracijos medyje turite dešiniuoju pelės mygtuku spustelėti skyrių „Vaidmenys“ ir pasirinkti „Visi vaidmenys“.


Baigdamas norėčiau pažymėti, kad šis straipsnis yra skirtas 1C kūrėjų konsultantams ir gali padėti pirmiausia tiems, kurie jau turi 1C:Enterprise kūrimo patirties. Nepaisant akivaizdaus paprastumo, semantikos išmanymas ir savo įmonės ar kliento organizacijos verslo procesų struktūros supratimas, norint teisingai paskirstyti teises, reikalauja tam tikro lygio žinių ir patirties.

„Vaidmenų“ konfigūracijos objektas suteikia aibę teisių operacijų (veiksmų) konfigūracijos objektuose.

Vaidmuo „Visos teisės“.

Tai tik vaidmuo (iš anksto neapibrėžtas), kuriame tikrinamos visų tipų teisės į visus konfigūracijos objektus.

Iš kitų vaidmenų jį išskiria „administravimo“ teisės buvimas.

Jei sukuriamas bent vienas vartotojas, sistema pradeda tikrinti, ar yra „Administravimo“ teisė – ją turi turėti bent vienas vartotojas.

Įrašų lygio prieigos apribojimai

Row Level Security (RLS) – rekordinio lygio apribojimas.

Prieigos prie duomenų apribojimų mechanizmas leidžia valdyti prieigos teises ne tik metaduomenų objektų, bet ir duomenų bazės objektų lygiu. Norint apriboti prieigą prie duomenų, galima naudoti šiuos objektus:

  • vaidmenys,
  • seanso parametrai,
  • funkcinės galimybės,
  • privilegijuotus bendrinamus modulius,
  • raktinis žodis LEIDŽIAMAS užklausos kalba.

Mechanizmas skirtas apriboti prieigą prie metaduomenų objektų lentelės įrašų, remiantis savavališkomis sąlygomis, nustatytomis šių lentelių eilučių laukų reikšmėmis. Pavyzdžiui, norėdami matyti tik „savo“ sandorio šalių, organizacijų ir kt. įrašus.

Techninis prieigos apribojimų įgyvendinimas 1C

1C generuoja užklausą DBVS. Serverių klasteris prie užklausos prideda skyrių WHERE, kuriame yra prieigos ribojimo per RLS sąlygos tekstas, tada ši užklausa siunčiama į DBVS, išgauti duomenys grąžinami 1C klientui.


Šis mechanizmas veiks esant bet kokiai kliento užklausai:

  • ataskaitose,
  • dinaminiuose sąrašuose ir įprastose sąrašų formose
  • pasirinktinėse užklausose.

Toks mechanizmo įgyvendinimas labai paveikia našumą.

Prieigos apribojimų apėjimo būdai.

Atliekant daug išteklių reikalaujančias operacijas (pavyzdžiui, apdorojant dokumentų perkėlimą), dalis kodo gali būti perkelta į privilegijuotus modulius.

A) Privilegijuotas modulis yra įprastas modulis, kurio ypatybėse yra žyma „Privilegijuota“.

Jo ypatumas yra tas, kad jame esantis kodas vykdomas be jokios prieigos teisių kontrolės, įskaitant RLS.


B) Taip pat privilegijuotas režimą galima įjungti dokumentų objektų moduliams. Tai daroma dokumento ypatybėse, vėliavėlėje

  • Privilegijuotas gydymas atliekant
  • Privilegijuotas režimas atšaukiant operaciją


B) Metodas SetPrivilegedMode()

Sistemos komanda leidžia jums padaryti dalį bet kurio modulio kodo privilegijuota.

Nuo kitos kodo eilutės veiks privilegijuotas vykdymo režimas.

Jis veiks iki šio režimo išjungimo linijos arba iki procedūros / funkcijos pabaigos

(Tiesa);

// bet koks kodas čia bus vykdomas be teisių kontrolės ir RLS

NustatytiPrivilegedMode(melas); // arba procedūros / funkcijos pabaiga

Privilegijuoto režimo įjungimo kartų skaičius turi sutapti su jo išjungimo skaičiumi. Tačiau jei atliekant procedūrą ar funkciją privilegijuotas režimas buvo įjungtas (vieną ar daugiau kartų), bet nebuvo išjungtas, sistema automatiškai išsijungs tiek kartų, kiek liko neužbaigtų įjungimų atliekant procedūrą ar funkciją.

Jei procedūroje ar funkcijoje iškviečiamas metodas NustatytiPrivilegedMode(Klaidinga) atliko daugiau nei metodų iškvietimus NustatytiPrivilegedMode(Tiesa), tada bus padaryta išimtis

Funkcija Privilegijuotas režimas() grąžina True, jei privilegijuotas režimas vis dar įjungtas, ir False, jei jis visiškai išjungtas. Tai neanalizuoja tam tikros funkcijos privilegijuoto režimo nustatymų skaičiaus.

Visos iškviestos procedūros ir funkcijos taip pat bus vykdomos privilegijuotuoju režimu.


Taip pat galima pradėti privilegijuotą seansą. Tai seansas, kurio metu privilegijuotas režimas nustatomas nuo pat sistemos pradžios. Be to, veikimo metu metodas Privilegijuotas režimas() visada grįš True, o galimybė išjungti privilegijuotąjį režimą nepalaikoma. Tik vartotojas, turintis administratoriaus teises (administravimo teisę), gali pradėti privilegijuotą seansą. Sesiją galima pradėti naudojant kliento programos paleidimo komandinės eilutės jungiklį UsePrivilegedMode arba infobase ryšio eilutės parametrą prmod .


Natūraliai kyla klausimas: kam tada apskritai nustatyti prieigos apribojimus, jei juos galima taip lengvai apeiti?

Saugus režimas.

Taip, galite rašyti išorinį apdorojimą naudodami privilegijuotą vykdymo režimą ir iškrauti / sugadinti duomenis. Kad to išvengtų, sistema turi globalaus konteksto metodą

SetSafeMode().

Saugusis režimas, be kita ko, nepaiso privilegijuoto režimo.

Jis turi būti įdiegtas prieš programiškai iškviečiant išorinius procesorius arba eksportuojant procedūras ir funkcijas iš jų modulių.

Atliekant draudžiamas operacijas, vykdymo metu daroma išimtis.

Be to, vaidmenų nustatymų lygiu galite išjungti vartotojų galimybę interaktyviai paleisti išorines ataskaitas ir apdoroti.

Prieigos apribojimų nustatymas

RLS galima konfigūruoti tik teisėms:

  • skaityti (pasirinkti)
  • pridėti (įterpti)
  • pakeisti (atnaujinti)
  • Ištrinti

Skaitymo operacijoms ir ištrynimas, duomenų bazėje esantis objektas turi atitikti duomenų prieigos apribojimus.

Dėl pridėjimo operacijos Prieigos prie duomenų apribojimas turi atitikti objektą, kurį planuojama įrašyti į duomenų bazę.

Keitimo operacijai prieigos prie duomenų apribojimas turi atitikti objektą tiek prieš pakeitimą (kad objektas būtų nuskaitomas), tiek po pakeitimo (kad objektas būtų parašytas).

Visoms kitoms teisėms tokios galimybės nėra.

Pridėkime naują „Nomenklatūros“ katalogo „skaitymo“ teisės apribojimą. Atsidarys laukų, kuriems galite konfigūruoti pridėtą apribojimą, sąrašas.

Tai reiškia, kad jei bandysite pasiekti pažymėtus laukus, apribojimas bus suaktyvintas, tačiau jei bandysite pasiekti nepažymėtus laukus, apribojimas neveiks.

Jei pasirinksite vėliavą " Kiti laukai“, apribojimas bus sukonfigūruotas visiems lentelės laukams, išskyrus laukus, kuriems yra aiškiai nustatyti apribojimai.


*Funkcija: teisės pridėti, keisti, ištrinti:

  • Apribojimą galima konfigūruoti tik visiems laukams.
  • Gali būti tik vienas apribojimas.

„Skaityti“ dešinėje galite sukonfigūruoti kelias sąlygas, kurios bus sujungtos su loginiu operatoriumi „AND“.

Ne visi pagrindinio suvaržymo duomenų objekto laukai gali būti naudojami apribojant šių tipų duomenų bazės objektus:

  • kaupimo registruose prieigos apribojimuose gali būti tik pagrindinio apribojimo objekto išmatavimai;
  • apskaitos registruose apribojimams gali būti naudojami tik pagrindinio apribojimo objekto balansiniai matavimai

Jei ribotos prieigos prie apyvartinio kaupimo registro duomenų sąlygomis naudojami matavimai, kurie neįtraukti į sumas, tai einant prie virtualios apsisukimų lentelės, saugomos sumos nenaudojamos, o užklausa atliekama visiškai pagal judėjimo stalas.

Prieigos apribojimų nustatymo mechanizmas.

Bet kokia operacija su duomenimis, saugomais duomenų bazėje 1C:Enterprise, galiausiai sukelia iškvietimą į duomenų bazę su prašymu nuskaityti arba pakeisti duomenis. Vykdant užklausas į duomenų bazę, vidiniai 1C:Enterprise mechanizmai nustato prieigos apribojimus. Kur:

  • Sukuriamas teisių sąrašas(skaityti, pridėti, keisti, ištrinti), duomenų bazės lentelių sąrašą ir šioje užklausoje naudojamų laukų sąrašą.
  • Iš visų dabartinio vartotojo vaidmenų pasirinkti prieigos apribojimai prie visų su prašymu susijusių teisių, lentelių ir laukų duomenų. Be to, jei vaidmuo neapima prieigos prie lentelės ar lauko duomenų apribojimų, tai reiškia, kad šioje lentelėje yra bet kurio įrašo būtinų laukų reikšmės. Kitaip tariant, prieigos prie duomenų apribojimo nebuvimas reiškia apribojimo buvimą KUR YRA TIESA.
  • Nuskaito esamas visų seanso parametrų ir funkcinių parinkčių reikšmes dalyvaujant pasirinktuose apribojimuose.

Norint gauti seanso parametro arba funkcijos parinkties vertę, dabartinis vartotojas neturi turėti leidimo gauti tą reikšmę. Tačiau jei kurio nors seanso parametro reikšmė nenustatyta, įvyks klaida ir duomenų bazės užklausa nebus vykdoma.

Apribojimai, gauti iš vieno vaidmens, sujungiami naudojant operaciją IR.

Apribojimai, gauti iš skirtingų vaidmenų, derinami naudojant operaciją ARBA.

Sukurtos sąlygos pridedamos prie SQL užklausų, su kuriomis 1C: Enterprise pasiekia DBVS. Prieinant prie duomenų iš prieigos apribojimo sąlygų, teisių patikra neatliekama (nei metaduomenų objektams, nei duomenų bazės objektams). Be to, sąlygų pridėjimo mechanizmas priklauso nuo pasirinkto apribojimų „visi“ arba „leistini“ veikimo būdo.


*Ypatybė: Jei vartotojas turi prieigą prie kelių vaidmenų su sukonfigūruotais apribojimais vieno objekto įrašo lygiu, tokiu atveju apribojimų sąlygos pridedamos naudojant loginę operaciją „ARBA“. Kitaip tariant, vartotojo galios yra kumuliacinės.

Tai leidžia daryti tokią išvadą: neleiskite susikirsti sąlygų, ribojančių prieigą prie vieno objekto, atliekančio skirtingus vaidmenis, nes tokiu atveju užklausos tekstas bus labai komplikuotas ir tai turės įtakos našumui.

"Viskas" metodas.

Nustatant apribojimus naudojant „visų“ metodą, sąlygos ir laukai pridedami prie SQL užklausų, kad „1C:Enterprise“ galėtų gauti informacijos apie tai, ar vykdant duomenų bazės užklausą buvo naudojami tam tikram vartotojui draudžiami duomenys, ar ne. Jei buvo naudojami draudžiami duomenys, užklausa sugenda dėl prieigos pažeidimo.

Prieigos apribojimų nustatymas naudojant „visų“ metodą schematiškai parodytas paveikslėlyje:


„Leidžiamas“ metodas.

Taikant apribojimus naudojant „leidžiamą“ metodą, į SQL užklausas įtraukiamos sąlygos, kad dabartiniam vartotojui draudžiami įrašai neturėtų įtakos užklausos rezultatui. Kitaip tariant, kai apribojimai įvedami „leidžiamu“ režimu, tam tikram vartotojui draudžiami įrašai laikomi trūkstamais ir neturi įtakos operacijos rezultatui, kuris schematiškai pateiktas paveikslėlyje:


Prieigos prie duomenų apribojimai taikomi duomenų bazės objektams tuo metu, kai „1C:Enterprise“ pasiekia duomenų bazę.

1C:Enterprise kliento-serverio versijoje apribojimai taikomi 1C:Enterprise serveriui.

Tačiau ši parinktis (LEIDŽIAMA) neveiks, jei užklausoje nurodysime lentelę, kuriai nesukonfigūruoti prieigos apribojimai, bet kurioje yra nuorodų į lentelės eilutes su sukonfigūruotais apribojimais. Tokiu atveju užklausos rezultatas bus rodomas „<Объект не найден>......“ vietoj nuorodos lauko reikšmės.


Jei kuriate ataskaitą arba apdorojate naudodami standartines arba pasirinktines konfigūracijos užklausas, visada patikrinkite vėliavėlę „Leidžiama“. kad ataskaita veiktų pagal bet kurį vartotoją su bet kokiu teisių rinkiniu.

Objektinio duomenų nuskaitymo iš duomenų bazės atveju vėliavėlės „Leidžiama“ nustatyti negalima. Todėl būtina konfigūruoti objektų skaitymo pasirinkimus, atsižvelgiant į galimus prieigos teisių apribojimus vartotojui. Objektų technologijoje nėra priemonių gauti tik leidžiamus duomenis.

Svarbu, kad jei užklausoje nenurodytas raktinis žodis LEIDŽIAMAS, visi toje užklausoje nurodyti pasirinkimai neturi prieštarauti jokiems užklausoje naudojamų duomenų bazės objektų skaitymo apribojimams. Be to, jei užklausoje naudojamos virtualios lentelės, atitinkami pasirinkimai turi būti taikomi pačioms virtualioms lentelėms.

Praktika 1. Užklausų kūrimo priemonė RLS nustatymuose.

Sukurkime užklausos skyriaus „KUR“ tekstą į katalogą. Galite naudoti užklausų kūrimo priemonę.
Dizainerė turi blankią išvaizdą.


Skirtukas "Lentelės".

Pagrindinė lentelė bus objekto, kuriam konfigūruojamas apribojimas, lentelė.

Taip pat galite pasirinkti kitas lenteles ir nustatyti įvairius ryšius tarp jų skirtuke „Ryšiai“.

Skirtukas "Sąlygos"

Čia galite konfigūruoti faktines prieigos apribojimo sąlygas

Prie nomenklatūros katalogo atributo „Kaina“ pridėkime sąlygas, kad būtų suteikta teisė „skaityti“ visus lentelės laukus.

"Nomenclature WHERE Nomenclature.Price > 500"

Pažiūrėkime, kaip veikia ši paprasta taisyklė. Katalogų lentelėje yra šie elementai:


Nustačius prieigos apribojimą, lentelėje bus rodomi tik tie elementai, kurie atitinka sąlygą:


Grupės taip pat išnyko. Pakeiskime apribojimo tekstą

„Nomenklatūra KUR Nomenklatūra.Kaina > 500

ARBA Nomenklatūra. Tai grupė"

Na, dabar to jums reikia.


Jei sąrašo nustatymuose pašalinsite „kodas“ lauko rodymą, bus rodomi visi katalogo elementai, t.y. apribojimas neveikė. Jei nustatysite rodyti lauką „Kodas“, apribojimas veiks.


Šiuo atveju, nepaisant to, kad katalogo elementas matomas sąrašo lauke, jo formos atidaryti negalima, nes sukonfigūruotas atributo apribojimas. Tas pats nutinka ir savavališkame užklausoje: bandant gauti „ribotą“ nuosavybę, atsiras prieigos klaida.


Jei bandysite programiškai gauti „apribotus“ kredencialus, taip pat bus pateikta prieigos klaida.


Be to, per nuorodą nebus galima pasiekti jokių objekto laukų, nes gavusi nuorodą sistema nuskaito visą objektą, o jei jame yra „apribotos“ detalės, objektas nebus nuskaitomas.

Todėl programiškai dirbant su duomenų bazės objektais reikia nepamiršti galimų apribojimų įrašo lygiu ir pagal užklausą gauti visus reikalingus objekto duomenis, o vėliau juos sudėti į struktūrą arba dalį kodo vykdyti privilegijuotajame modulyje.

Nustačius prieigos apribojimą, pasikeitė eilutės rodymas teisių sąraše - ji tapo pilka ir atsirado piktograma.

Apribojimai nustatant prieigą (RLS).

  • Nėra Santraukos skyriaus;
  • Negalima pasiekti virtualių registrų lentelių;
  • Jūs negalite naudoti parametrų aiškiai;
  • Galima naudoti įdėtose užklausose any>/span> užklausos kalbos įrankiai, išskyrus:
    • operatorius HIERARCHIJOJE;
    • REZULTATAI pasiūlymai;
    • įdėtos užklausos rezultatai neturi būti stalo dalių>/span>;
    • virtualūs stalai, ypač likučiai ir apyvartos

Praktika 2. Nomenklatūra su esama kaina.

Apribokite prieigą, jei reikia rodyti elementus, kurių dabartinė kaina didesnė už tam tikrą vertę, pavyzdžiui, 100.

Sprendimas:

Pridedame naują prieigos apribojimo taisyklę katalogui „Nomenklatūra“ su „skaitymo“ teise.
Pasirinkite „kiti laukai“.
Konstruktoriumi pridedame įdėtą užklausą. Jame pasirinkite informacijos registro lentelę „Prekių kainos“.
Nėra skirtuko „užsakymas“ – tai užklausų kūrėjo funkcija, skirta sukurti prieigos apribojimo užklausą.
Skirtuke „Advanced“ nustatykite „first 999999999“, pasirodys skirtukas „užsakymas“.
Mes nustatome rikiavimą pagal lauką „Laikotarpis“ mažėjančia tvarka.
Tada pagal nuorodą nustatome ryšį tarp pagrindinės lentelės ir antrinės užklausos.


Prieigos apribojimų šablonai.

3 praktika. „Sandorio šalių“ apribojimas pagal vertę konstantoje.

Nustatykime prieigos apribojimą sandorio šalių katalogui pagal konstantoje saugomą reikšmę.

Be to, turite nustatyti apribojimą visiems objektams, kurie išsamiai naudoja katalogą „Sandorio šalys“.

Sprendimas

Kataloge „Sąlygos“ nustatysime „skaitymo“ teisės apribojimą, pridėdami įdėtą užklausą prie konstantos skiltyje „Sąlygos“. Nepamirškite, kad tai yra grupė.

Matome problemą, Counterparties katalogas filtruojamas teisingai ir rodomi visi dokumentai su atributu "Counterparty", kai kurie su "sugedusiomis" nuorodomis atribute "Counterparty".

Dabar reikia sukonfigūruoti prieigos apribojimus visiems objektams, kurie naudoja nuorodą į „Paskyros“. Raskime juos naudodami paslaugą „ieškoti nuorodų į objektą“.

Nukopijuokime ir šiek tiek pakeiskime RLS sąlygos tekstą iš katalogo „Sąlygos šalys“. Tai turi būti daroma tiek kartų, kiek randama objektų.

Arba naudokite prieigos apribojimų šabloną, kad išvengtumėte kodo dubliavimo problemų.

Prieigos apribojimo šablonai konfigūruojami vaidmens lygiu ir gali būti naudojami bet kuriam redaguojamo vaidmens objektui.

Prie šablono galite pridėti bet kokį prieigos apribojimo tekstą. Šablonas iškviečiamas naudojant simbolį „#“. Pavyzdžiui, #TemplateCounterparty.

Per # in 1C instrukcijos rašomos į pirminį procesorių. Vykdydama prieigos apribojimo nustatymus, platforma pakeičia šablono skambučio tekstą šablono tekstu.

Prie šablono „Rangovo šablonas“ pridėkime tekstą po žodžio WHERE, išskyrus tekstą apie EtoGroup.

Parametrai prieigos apribojimų šablonuose.

Tęskime 2 uždavinio sprendimą.

Dabar problema yra ta, kad pagrindinė lentelė kataloge vadinama „santarvės šalimi“, dokumente „Sąskaitos gavimo sąskaita“. Kataloge tikrinamas laukas vadinamas „nuoroda“, dokumente – „Sandorio šalimi“.

Pakeiskime pagrindinės lentelės pavadinimą šablono tekste į „#CurrentTable“

„#CurrentTable“ yra iš anksto nustatytas parametras.

Ir per tašką nurodome įvesties parametro numerį - „.#Parameter(1)

„#Parameter“ taip pat yra iš anksto nustatyta reikšmė. Gali būti bet koks įvesties parametrų skaičius. Jie adresuojami serijos numeriu.

Katalogo prieigos apribojimų tekste nurodome:

Dėl dokumento:

„Prekių pardavimas KUR #TemplateCounterparty („Sandorio šalis“)“

Iškviečiant prieigos apribojimo šabloną, parametrai jam turi būti perduodami tik kaip String, t.y. kabutėse.

Pagrindinė lentelė – Nomenklatūra

Šablono tekstas yra:

#DabartinėLentelė WHERE #DabartinėLentelė.#Parameter(1) = #Parameter(2)

Šablono tekste yra dalis teksto duomenų prieigos apribojimo kalba ir gali būti parametrų, paryškintų simboliu „#“.

Po simbolio „#“ gali būti:

  • Vienas iš raktinių žodžių:
    • Parametras, po kurio skliausteliuose nurodomas parametro numeris šablone;
    • CurrentTable – nurodo įterpimą į tekstą pilno lentelės, kuriai kuriamas apribojimas, pavadinimo;
    • Dabartinės lentelės pavadinimas– žymi įterpimą į tekstą pilno lentelės pavadinimo (kaip eilutės reikšmė, kabutėse), kuriai taikoma instrukcija, dabartinėje integruotos kalbos versijoje;
    • NameCurrentAccessRight– yra teisės, kuriai vykdomas esamas apribojimas, pavadinimas: READ, ADD, INSERT, CHANGE, UPDATE, DELETE;
  • šablono parametro pavadinimas – reiškia atitinkamo šablono parametro apribojimo įterpimą į tekstą;
  • simbolis „#“ – nurodo vieno simbolio „#“ įterpimą į tekstą.

Prieigos apribojimo išraiškoje gali būti:

  • Prieigos apribojimo šablonas, kuris nurodytas formate #TemplateName("Šablono parametro vertė 1", "Šablono parametro vertė 2",...). Kiekvienas šablono parametras yra parašytas dvigubomis kabutėmis. Jei parametro tekste reikia nurodyti dvigubą kabutę, turite naudoti dvi dvigubas kabutes.
  • Funkcija StrContains (WhereWeLook, WhatWeLook). Funkcija skirta ieškoti WhatWeLook eilutės eilėje WhereWeLook. Grąžina True, jei įvykis rastas, o false kitu atveju.
  • + operatorius skirtas eilučių sujungimui.

Kad būtų lengviau redaguoti šablono tekstą, vaidmens formos skirtuke Apribojimų šablonai spustelėkite mygtuką Nustatyti šablono tekstą. Atsidariusiame dialogo lange įveskite šablono tekstą ir spustelėkite Gerai.

Jų negalima įdiegti naudojant Nustatyti parametrą () ar kažkas panašaus.

Parametrai šiuo atveju yra šie:

  • Seanso parinktys
  • Funkcinės parinktys

Seanso parametrų skaitymas prieigos apribojimo užklausoje vyksta privilegijuotuoju režimu, tai yra, nekontroliuojant teisių su jais dirbti.

Praktika 4. Prieiga prie „savo“ sandorio šalių

Būtina sukonfigūruoti dabartinio vartotojo prieigos apribojimą „savo“ sandorio šalims.

Yra katalogas „Vartotojai“, katalogas „Sandorio šalys“, dokumentai su rekvizitais „Sandorio šalis“.

Dabartinis vartotojas turėtų matyti tik tų sandorio šalių, su kuriomis su juo užmegztas ryšys, duomenis.

Taip pat reikia sukonfigūruoti ryšį.

Galimi variantai:

Ryšių tarp vartotojo ir sandorio šalies užmezgimas

  • Išsami informacija sandorio šalių kataloge
  • Informacijos registras

Galimi problemos sprendimai:

  • Vartotojo saugojimas konstantoje yra blogas pasirinkimas.
  • Fiksuoto dabartinio vartotojo sandorio šalių masyvo saugojimas seanso parametruose nėra labai geras pasirinkimas, gali būti daug sandorio šalių
  • Saugoti dabartinio vartotojo sesijos parametrus, tada prašyti „jo“ sandorio šalių sąrašo yra priimtina parinktis.
  • Kiti variantai.

Sprendimas.

Sukurkime naują seanso parametrą „CurrentUser“ ir užpildykime seanso modulyje.

Sukurkime informacijos registrą „Vadovų ir rangovų atitiktis“

Sukurkime naują vaidmenį ir jame naują dokumento „Sąskaita faktūra“ prieigos apribojimą.

Prašymo tekste pagrindinę lentelę sujungsime su informacijos registru Paskyra = Paskyra ir Valdytojas = &Dabartinis naudotojas. Ryšio tipas Vidinis.

Jei įmanoma, prieigos apribojimo tekstuose geriau vengti įdėtų užklausų, nes jos bus vykdomos kiekvieną kartą, kai iš šio objekto bus nuskaitomi duomenys iš duomenų bazės.

Tikrinama – apribojimai veikia

*Ypatybė: jei pakeisite vartotojų sandorio šalių sąrašą registre, prieigos apribojimai įsigalios iš karto, neperkraunant vartotojo seanso.

Praktika 5. Pakeitimų draudimo data.

Būtina įgyvendinti duomenų redagavimo apribojimą iki nustatytos pakeitimų uždraudimo datos.
Turite jį apriboti vartotojams.

Sukurkime informacijos registrą „Pakeitimų draudimo datos“ su dimensija Vartotojas, šaltinis Draudimo data.

Sukurkime sprendimo logiką taip:

  • jei vartotojas nenurodytas, draudimas taikomas visiems vartotojams
  • jei yra apribojimas visiems vartotojams ir apribojimas konkrečiam vartotojui, tai apribojimas taikomas konkrečiam vartotojui, o kitiems pagal bendrąjį principą.

Akivaizdu, kad tokį apribojimą galima sukonfigūruoti duomenų bazės objektams, turintiems tam tikrą vietą laiko ašyje. Gali būti

  • Dokumentacija
  • Periodiniai informacijos registrai

Sukurkime naują vaidmenį „Apribojimai pagal pakeitimų uždraudimo datą“.

Jame dokumentui „Sąskaita“ už teisingą „pakeitimą“ pridėsime naują prieigos apribojimą.

Nurodome visų laukų nustatymą.

Apribojimo tekstas yra toks:

ReceiptInvoice FROM Document.ReceiptInvoice AS ReceiptInvoice

Pakeiskite uždraudimo datas AS uždraudimo datą
NUO

VIDINIS JUNGIMAS (PASIRINKITE
MAX(Keisti draudžiamas datas.Vartotojas) AS vartotojas
NUO
Informacijos registras Pakeitimų draudimo datos AS Keitimų draudimo datos
KUR
(Keisti draudžiamas datas. Vartotojas = &Dabartinis naudotojas
ARBA datos draudžiami pakeitimai.Vartotojas = VALUE(Directory.users.EmptyLink))) AS VZ_User
PAGAL pakeitimų uždraudimo datą.Vartotojas = VZ_User.User) AS NestedQuery
Programinės įrangos kvito sąskaita faktūra.Data > Įdėta užklausa.Uždraudimo data

Patikrinkime – apribojimas veikia.

Pirminio procesoriaus instrukcijų naudojimas

#Jei Sąlyga1 #Tada

1 užklausos fragmentas

#ElseIf Sąlyga2 #Tada

2 užklausos fragmentas

#Kitaip

3 užklausos fragmentas

#EndIf

Esant sąlygoms, galite naudoti logines operacijas (ir, arba, ne ir pan.) ir prieigą prie seanso parametrų.

Šis metodas prieigos apribojimų konstravimo kontekste patogus tuo, kad, atsižvelgiant į sąlygas, bus sudarytas trumpesnis užklausos tekstas. Paprastesnė užklausa mažiau apkrauna sistemą.

Neigiama yra tai, kad užklausos konstruktorius neveiks su tokiu tekstu.

* Ypatumas:

Priešingai nei įtaisytosios kalbos išankstinio procesoriaus instrukcijos prieigos apribojimų tekstuose, prieš operatorių Tada reikia įdėti maišą - #Tada

6. pratimas. Perjunkite „Naudoti RLS“

Papildykime savo apribojimų sistemą jungikliu, kuris įjungia/išjungia apribojimų naudojimą rekordiniu lygiu.

Norėdami tai padaryti, pridėsime konstantą ir seanso parametrą pavadinimu „UseRLS“.

Parašykime Session Module, kad sesijos parametro reikšmė būtų nustatyta iš konstantos reikšmės.

Prie visų prieigos apribojimų tekstų pridėkime šį kodą:

„#If &UseRLS #Tada….. #EndIf“

Patikriname - viskas veikia.

Tačiau dabar, įjungus vėliavėlę „naudoti radarą“, pakeitimai įsigalios ne iš karto. Kodėl?

Kadangi seanso parametras nustatomas seanso pradžioje.

Galima nustatyti, kad seanso parametro reikšmė būtų nustatyta iš naujo, kai įrašoma nauja pastovi reikšmė, tačiau tai veiks tik dabartinėje vartotojo sesijoje. Kiti vartotojai turėtų būti raginami iš naujo paleisti sistemą.


Pirmos dalies pabaiga.

Jei pastebėjote klaidą, pasirinkite teksto dalį ir paspauskite Ctrl+Enter
DALINTIS:
Kompiuteriai ir modernios programėlės