Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows 7, XP
  • 1c rls izvješće o pravima pristupa. Pet koraka postavljanja - pristup direktorijima na razini zapisa

1c rls izvješće o pravima pristupa. Pet koraka postavljanja - pristup direktorijima na razini zapisa

Platforma 1C:Enterprise 8 ima ugrađen mehanizam za ograničavanje pristupa podacima na razini zapisa. Ovdje možete pročitati opće informacije o tome. Ukratko, RLS će vam omogućiti da ograničite pristup podacima na temelju određenih uvjeta vrijednosti polja. Na primjer, možete ograničiti korisnički pristup dokumentima ovisno o vrijednosti atributa "Organizacija". Neki će korisnici raditi s dokumentima za organizaciju "Društvo za upravljanje", a drugi s organizacijom "Mliječna tvornica". Kao primjer.

Priprema

Primjer ćemo implementirati u demo konfiguraciju SCP 1.3. Kreirajmo korisnika "Skladištar" i dodajmo mu istoimenu ulogu "Skladištar".

Sada nastavimo izravno s postavljanjem prava pristupa na razini zapisa. Prijeđimo na sučelje "User Administration". U glavnom izborniku odaberite "Pristup na razini zapisa -> Opcije". Ovdje potvrdite okvir pokraj "Ograniči pristup na razini zapisa prema vrsti objekta" i odaberite "Organizacije" na popisu objekata.

Time smo omogućili korištenje RLS-a. Sada ga trebate konfigurirati.

Kontrola pristupa na razini zapisa nije konfigurirana zasebno za svakog korisnika ili profil dopuštenja. RLS je konfiguriran za grupe korisnika. Dodajmo novu korisničku grupu, nazovimo je "Skladištari"

Sastav grupe na desnoj strani obrasca prikazuje popis korisnika koji pripadaju ovoj grupi. Dodajmo korisnika kojeg smo prethodno stvorili na popis. S lijeve strane nalazi se tablica ograničenja pristupa. Prilikom postavljanja RLS-a, odabrali smo da će pristup biti ograničen samo organizacijom, tako da vidimo samo jednu vrstu objekta pristupa. Kliknite na gumb "Postavke pristupa". Otvorit će se obrada postavljanja prava pristupa za trenutnu grupu.

Dodajmo organizaciju "IPE "Poduzetnik" na popis objekata pristupa za grupu. Vrsta nasljeđivanja prava ostat će nepromijenjena. Postavit ćemo pravo pristupnom objektu za čitanje i pisanje. Kliknite "OK", postavke su spremne. Upravo smo konfigurirali RLS na razini organizacije.

Ono što korisnik vidi

Pokrenimo program pod prethodno stvorenim korisnikom i otvorimo direktorij "Organizacije". Ovako će lista izgledati za našeg korisnika i za korisnika s punim pravima:

Kao što vidimo, korisnik skladištenja vidi samo jednu organizaciju za koju smo odobrili pristup za čitanje. Isto vrijedi i za dokumente, na primjer, primitak robe i usluga.

Dakle, korisnik ne samo da neće vidjeti organizacije za koje mu nije postavljen pristup, već neće moći čitati/pisati dokumente i druge objekte u informacijskoj bazi za koje su prava postavljena u ulozi za “Organizaciju” atribut.

Pogledali smo najjednostavniji primjer postavljanja RLS-a. U sljedećem članku govorit ćemo o implementaciji RLS mehanizma u konfiguraciji "Manufacturing Enterprise Management" verzija 1.3.

Konfiguracijski objekt "uloge" daje skup prava na operacije (akcije) nad konfiguracijskim objektima.

Uloga "Puna prava".

Ovo je samo uloga (nije unaprijed definirana) u kojoj se provjeravaju sve vrste prava na sve konfiguracijske objekte.

Ono što ga razlikuje od ostalih uloga je prisutnost prava "Administracije".

Ako je kreiran barem jedan korisnik, sustav počinje provjeravati prisutnost prava "Administracija" - mora ga imati barem jedan korisnik.

Ograničenja pristupa na rekordnoj razini

Sigurnost na razini retka (RLS) – ograničenje na razini zapisa.

Mehanizam ograničenja pristupa podacima omogućuje vam upravljanje pravima pristupa ne samo na razini objekata metapodataka, već i na razini objekata baze podataka. Za ograničavanje pristupa podacima mogu se koristiti sljedeći objekti:

  • uloge,
  • parametri sesije,
  • funkcionalne mogućnosti,
  • privilegirani dijeljeni moduli,
  • ključna riječ DOZVOLJENO u jeziku upita.

Mehanizam je dizajniran za ograničavanje pristupa zapisima tablice objekata metapodataka na temelju proizvoljnih uvjeta nametnutih vrijednostima polja redaka ovih tablica. Na primjer, da vidite zapise samo za "vaše" druge strane, organizacije itd.

Tehnička implementacija ograničenja pristupa u 1C

1C generira zahtjev za DBMS. Klaster poslužitelja zahtjevu dodaje odjeljak WHERE, koji sadrži tekst uvjeta za ograničavanje pristupa putem RLS-a, zatim se ovaj zahtjev šalje DBMS-u, ekstrahirani podaci vraćaju se 1C klijentu.


Ovaj mehanizam će raditi za svaki zahtjev klijenta:

  • u izvješćima,
  • u dinamičkim popisima i u regularnim obrascima popisa
  • u prilagođenim upitima.

Takva implementacija mehanizma uvelike utječe na performanse.

Načini zaobilaženja ograničenja pristupa.

U velikim operacijama koje zahtijevaju velike resurse (na primjer, obrada ponovnog postavljanja dokumenata), dio koda može se premjestiti u privilegirane module.

A) Privilegirani modul je uobičajeni modul s oznakom "Privilegirano" u svojstvima.

Njegova je osobitost da se kod u njemu izvršava bez ikakve kontrole prava pristupa, uključujući RLS.


B) Također privilegiran način se može uključiti za module objekata dokumenata. To se radi u svojstvima dokumenta, zastava

  • Povlašteni tretman kod dirigiranja
  • Privilegirani način rada prilikom otkazivanja transakcije


B) Metoda PostaviPrivilegedMode()

Sustavna naredba vam omogućuje da dio koda bilo kojeg modula učinite privilegiranim.

Od sljedećeg retka koda radit će privilegirani način izvršavanja.

Radit će do linije za onemogućavanje ovog načina rada ili do kraja postupka/funkcije

(Pravi);

// svaki kod ovdje će se izvršiti bez kontrole prava i RLS-a

PostaviPrivilegedMode(Laž ); // ili kraj procedure/funkcije

Broj puta kada je privilegirani način rada omogućen mora odgovarati broju puta kada je onemogućen. Međutim, ako je unutar procedure ili funkcije povlašteni način rada bio uključen (jednom ili više), ali nije isključen, tada će se sustav automatski isključiti onoliko puta koliko je bilo nepotpunih uključivanja u proceduri ili funkciji koja je ostala

Ako u proceduri ili funkciji poziva metodu PostaviPrivilegedMode(False) napravio je više od poziva metode PostaviPrivilegedMode(True), tada će biti bačena iznimka

Funkcija PrivilegedMode() vraća True ako je povlašteni način rada još uvijek omogućen, i False ako je potpuno onemogućen. Ovo ne analizira broj postavki povlaštenog načina rada u određenoj funkciji.

Sve pozvane procedure i funkcije također će se izvršiti u povlaštenom načinu rada.


Također je moguće započeti privilegiranu sesiju. Ovo je sesija u kojoj je privilegirani način rada uspostavljen od samog početka sustava. Štoviše, tijekom rada metoda PrivilegedMode() će uvijek vratiti True, a mogućnost onemogućavanja povlaštenog načina rada nije podržana. Samo korisnik koji ima administratorska prava (Administratorsko pravo) može pokrenuti privilegiranu sesiju. Sesija se može pokrenuti korištenjem prekidača naredbenog retka za pokretanje klijentske aplikacije UsePrivilegedMode ili parametra niza povezivanja infobaze prmod.


Prirodno se postavlja pitanje: Zašto onda uopće postavljati ograničenja pristupa ako se to može tako lako zaobići?

Siguran način.

Da, možete pisati vanjsku obradu s privilegiranim načinom izvršavanja i istovarati/oštetiti podatke. Kako bi se to spriječilo, sustav ima metodu globalnog konteksta

Postavi SafeMode().

Siguran način rada, između ostalog, zanemaruje privilegirani način rada.

Mora se instalirati prije programskog pozivanja vanjskih procesora ili izvoza procedura i funkcija iz njihovih modula.

Prilikom izvođenja zabranjenih operacija, iznimka se izbacuje tijekom izvođenja.

Osim toga, na razini postavki uloge, možete onemogućiti mogućnost korisnicima da interaktivno pokreću vanjska izvješća i obradu.

Postavljanje ograničenja pristupa

RLS se može konfigurirati samo za prava:

  • pročitati (odabrati)
  • dodavanje (umetanje)
  • promijeniti (ažurirati)
  • izbrisati

Za operacije čitanja i brisanje, objekt koji se nalazi u bazi podataka mora biti u skladu s ograničenjima pristupa podacima.

Za operaciju dodavanja Ograničenje pristupa podacima mora odgovarati objektu koji se planira upisati u bazu podataka.

Za operaciju promjene ograničenje pristupa podacima mora biti u skladu s objektom i prije promjene (tako da se objekt čita) i nakon promjene (tako da se objekt zapisuje).

Za sva ostala prava ne postoji takva mogućnost.

Dodajmo novo ograničenje za pravo “čitanja” direktorija “Nomenklatura”. Otvorit će se popis polja za koja možete konfigurirati dodano ograničenje.

To znači da ako pokušate pristupiti označenim poljima, ograničenje će se pokrenuti, ali ako pokušate pristupiti neoznačenim poljima, ograničenje neće funkcionirati.

Ako odaberete zastavu " Ostala polja", ograničenje će biti konfigurirano za sva polja tablice, osim za polja za koja su ograničenja izričito postavljena.


*Značajka: za prava na dodavanje, promjenu, brisanje:

  • Ograničenje se može konfigurirati samo za sva polja.
  • Može postojati samo jedno ograničenje.

Za pravo "Čitanje" možete konfigurirati nekoliko uvjeta; oni će se kombinirati s logičkim operatorom "I".

Ne smiju se sva polja glavnog podatkovnog objekta ograničenja koristiti u ograničenjima za sljedeće vrste objekata baze podataka:

  • u akumulacijskim registrima, ograničenja pristupa mogu sadržavati samo mjerenja glavnog objekta ograničenja;
  • u računovodstvenim registrima, ograničenja mogu koristiti samo bilančna mjerenja glavnog predmeta ograničenja

Ako se u uvjetima ograničenog pristupa podacima optočnog akumulacijskog registra koriste mjerenja koja nisu uključena u zbrojeve, tada se pri pristupu virtualnoj tablici okretaja ne koriste pohranjeni zbrojevi i zahtjev se izvršava u potpunosti prema stol za kretanje.

Mehanizam za nametanje ograničenja pristupa.

Svaka operacija na podacima pohranjenim u bazi podataka u 1C:Enterprise na kraju dovodi do poziva baze podataka sa zahtjevom za čitanje ili promjenu podataka. U procesu izvršavanja upita u bazu podataka, interni mehanizmi 1C:Enterprise nameću ograničenja pristupa. pri čemu:

  • Generira se popis prava(čitanje, dodavanje, mijenjanje, brisanje), popis tablica baze podataka i popis polja koja koristi ovaj upit.
  • Iz svih uloga trenutnog korisnika odabrana su ograničenja pristupa na podatke za sva prava, tablice i polja uključena u zahtjev. Štoviše, ako uloga ne sadrži ograničenja pristupa podacima tablice ili polja, to znači da su vrijednosti potrebnih polja iz bilo kojeg zapisa dostupne u ovoj tablici. Drugim riječima, nepostojanje ograničenja pristupa podacima znači postojanje ograničenja GDJE JE ISTINA.
  • Dohvaća trenutne vrijednosti svih parametara sesije i funkcionalnih opcija sudjelovanje u odabranim ograničenjima.

Za dobivanje vrijednosti parametra sesije ili opcije značajke, trenutni korisnik ne mora imati dozvolu za dobivanje te vrijednosti. Međutim, ako vrijednost nekog parametra sesije nije postavljena, pojavit će se pogreška i upit baze podataka neće biti izvršen.

Ograničenja izvedena iz jedne uloge kombiniraju se pomoću operacije AND.

Ograničenja izvedena iz različitih uloga kombiniraju se pomoću operacije OR.

Konstruirani uvjeti dodaju se SQL upitima s kojima 1C: Enterprise pristupa DBMS-u. Prilikom pristupa podacima iz uvjeta ograničenja pristupa ne vrši se provjera prava (ni za objekte metapodataka ni za objekte baze podataka). Štoviše, mehanizam za dodavanje uvjeta ovisi o odabranom načinu rada ograničenja "sve" ili "dopušteno".


*Značajka: ako korisnik ima pristup nekoliko uloga s konfiguriranim ograničenjima na razini zapisa za jedan objekt, tada se u ovom slučaju uvjeti ograničenja dodaju pomoću logičke operacije "ILI". Drugim riječima, ovlasti korisnika su kumulativne.

To dovodi do sljedećeg zaključka: nemojte dopustiti da se presijecaju uvjeti za ograničavanje pristupa jednom objektu u različitim ulogama, jer će u tom slučaju tekst zahtjeva biti jako kompliciran i to će utjecati na performanse.

Metoda "sve".

Prilikom nametanja ograničenja pomoću metode "sve", uvjeti i polja dodaju se SQL upitima kako bi 1C:Enterprise mogao dobiti informacije o tome jesu li tijekom izvršavanja upita baze podataka korišteni podaci koji su zabranjeni za određenog korisnika ili ne. Ako su korišteni zabranjeni podaci, zahtjev će se srušiti zbog kršenja pristupa.

Nametanje ograničenja pristupa metodom "sve" shematski je prikazano na slici:


“Dopuštena” metoda.

Prilikom primjene ograničenja pomoću metode "dopušteno", SQL upitima se dodaju uvjeti tako da zapisi koji su zabranjeni za trenutnog korisnika ne utječu na rezultat upita. Drugim riječima, kada su ograničenja nametnuta u "dopuštenom" načinu rada, zapisi koji su zabranjeni za određenog korisnika smatraju se nedostajućim i ne utječu na rezultat operacije, što je shematski prikazano na slici:


Ograničenja pristupa podacima nameću se objektima baze podataka u trenutku kada 1C:Enterprise pristupa bazi podataka.

U verziji klijent-poslužitelj 1C:Enterprise, ograničenja se primjenjuju na poslužitelj 1C:Enterprise.

Međutim, ova opcija (DOPUŠTENO) neće raditi ako se u upitu pozivamo na tablicu za koju ograničenja pristupa nisu konfigurirana, ali koja sadrži reference na retke tablice s konfiguriranim ograničenjima. U tom će slučaju rezultat upita prikazati "<Объект не найден>......" umjesto vrijednosti referentnog polja.


Ako razvijate izvješće ili obradu pomoću standardnih ili prilagođenih konfiguracijskih upita, uvijek provjerite oznaku "Dopušteno". kako bi izvješće radilo pod bilo kojim korisnikom s bilo kojim skupom prava.

U slučaju objektnog čitanja podataka iz baze, nije moguće postaviti oznaku “Dopušteno”. Stoga je potrebno konfigurirajte odabire za čitanje objekta, uzimajući u obzir moguća ograničenja prava pristupa za korisnika. Ne postoje načini dobivanja samo dopuštenih podataka u objektnoj tehnologiji.

Važno je da ako upit ne navodi ključnu riječ ALLOWED, tada svi odabiri navedeni u tom upitu ne smiju biti u sukobu s bilo kojim ograničenjima čitanja na objektima baze podataka koji se koriste u upitu. Štoviše, ako upit koristi virtualne tablice, tada se odgovarajući odabiri moraju primijeniti na same virtualne tablice.

Vježba 1. Izrada upita u RLS postavkama.

Sastavimo tekst odjeljka "WHERE" u upitu za imenik. Možete koristiti alat za sastavljanje upita.
Dizajner ima ogoljen izgled.


Kartica "Tablice".

Glavna tablica bit će tablica objekta za koji se konfigurira ograničenje.

Također možete odabrati druge tablice i postaviti različite veze između njih na kartici "Relacije".

Kartica "Uvjeti"

Ovdje možete konfigurirati stvarne uvjete ograničenja pristupa

Dodajmo uvjete atributu "Cijena" imenika nomenklature za pravo "čitanja" na sva polja tablice.

“Nomenklatura WHERE Nomenklatura. Cijena > 500”

Pogledajmo kako funkcionira ovo jednostavno pravilo. Tablica imenika sadrži sljedeće elemente:


Nakon postavljanja ograničenja pristupa, tablica će prikazati samo elemente koji zadovoljavaju uvjet:


Nestale su i grupe. Promijenimo tekst ograničenja

“Nomenklatura WHERE Nomenklatura.Cijena > 500

OR Nomenklatura. Ovo je grupa"

Pa, to je ono što vam treba.


Ako uklonite prikaz polja “kod” u postavkama popisa, bit će prikazani svi elementi imenika, tj. ograničenje nije uspjelo. Ako postavite polje "Kôd" za prikaz, ograničenje će funkcionirati.


U ovom slučaju, unatoč činjenici da je element imenika vidljiv u polju popisa, njegov se obrazac ne može otvoriti jer je konfigurirano ograničenje atributa. Ista stvar se događa u proizvoljnom zahtjevu: kada pokušate dobiti "ograničeno" svojstvo, doći će do pogreške pristupa.


Ako pokušate programski dobiti "ograničene" vjerodajnice, također će se pojaviti pogreška pristupa.


Štoviše, preko poveznice neće biti moguće pristupiti nijednom polju objekta jer prilikom primanja poveznice sustav čita cijeli objekt, a ako sadrži “ograničene” detalje, objekt neće biti pročitan.

Stoga, kada radite programski s objektima baze podataka, morate imati na umu moguća ograničenja na razini zapisa i dobiti sve potrebne podatke o objektu na zahtjev i zatim ih smjestiti u strukturu ili izvršiti dio koda u privilegiranom modulu.

Nakon postavljanja ograničenja pristupa promijenio se prikaz retka na popisu prava - postao je siv i pojavila se ikona.

Ograničenja prilikom postavljanja pristupa (RLS).

  • Ne postoji odjeljak Sažetak;
  • Ne može se pristupiti virtualnim tablicama registara;
  • Ne možete eksplicitno koristiti parametre;
  • Može se koristiti u ugniježđenim upitima bilo koji>/span> alat za jezik upita osim:
    • operator U HIJERARHIJI;
    • REZULTATI prijedlozi;
    • ugniježđeni rezultati upita ne smije sadržavati dijelove tablice>/span>;
    • virtualni stolovi, posebno stanja i prometa

Praksa 2. Nomenklatura s tekućom cijenom.

Napravite ograničenje pristupa ako trebate prikazati stavke čija je trenutna cijena veća od određene vrijednosti, na primjer, 100.

Riješenje:

Dodajemo novo pravilo ograničenja pristupa za imenik "Nomenklatura" s pravom "čitanja".
Odaberite “ostala polja”.
U konstruktoru dodajemo ugniježđeni upit. U njemu odaberite tablicu registra podataka “Cijene artikala”.
Ne postoji kartica "narudžba" - ovo je značajka dizajnera upita za izradu zahtjeva za ograničenje pristupa.
Na kartici "Napredno" postavite "prvih 999999999", pojavljuje se kartica "narudžba".
Postavljamo redoslijed prema polju "Period" u silaznom redoslijedu.
Zatim postavljamo vezu između glavne tablice i podupita prema referenci.


Predlošci ograničenja pristupa.

Praksa 3. Ograničenje na "druge strane" prema vrijednosti u konstanti.

Postavimo ograničenje pristupa za direktorij Counterparties na temelju vrijednosti pohranjene u konstanti.

Osim toga, u pojedinostima morate postaviti ograničenje za sve objekte koji koriste imenik "Druge strane".

Riješenje

Za imenik "Druge strane" postavit ćemo ograničenje za pravo "čitanja" dodavanjem ugniježđenog upita konstanti u odjeljku "Uvjeti". Ne zaboravite da je ovo grupa.

Vidimo problem, direktorij Protustranaka je ispravno filtriran i prikazani su svi dokumenti s atributom "Protustranaka", neki s "neispravnim" vezama u atributu "Protustranaka".

Sada morate konfigurirati ograničenja pristupa za sve objekte koji koriste vezu na "Računi". Pronađimo ih pomoću usluge "traži poveznice na objekt".

Kopirajmo i malo modificirajmo tekst RLS uvjeta iz direktorija "Druge strane". Ovo se mora učiniti onoliko puta koliko ima pronađenih predmeta.

Ili upotrijebite uzorak ograničenja pristupa kako biste izbjegli probleme s dupliciranjem koda.

Predlošci ograničenja pristupa konfigurirani su na razini uloge i mogu se koristiti za bilo koji objekt unutar uređene uloge.

U predložak možete dodati bilo koji dio teksta ograničenja pristupa. Predložak se poziva pomoću simbola “#”. Na primjer, #TemplateCounterparty.

Preko # u 1C instrukcije se pišu u predprocesor. U kontekstu izvršavanja postavki ograničenja pristupa, platforma zamjenjuje tekst poziva predloška tekstom predloška.

Dodajmo tekst nakon riječi WHERE u predložak "Contractor Template", osim teksta o EtoGroup.

Parametri u predlošcima ograničenja pristupa.

Nastavimo rješavati zadatak 2.

Sada je problem što se glavna tablica u imeniku zove "druga strana", u dokumentu "Primna faktura". Polje koje se provjerava u imeniku naziva se "link", u dokumentu se zove "Counterparty".

Promijenimo naziv glavne tablice u tekstu predloška u "#CurrentTable"

"#CurrentTable" je unaprijed definirani parametar.

I kroz točku označavamo broj ulaznog parametra - “.#Parametar(1)

“#Parametar” također je unaprijed definirana vrijednost. Može sadržavati proizvoljan broj ulaznih parametara. Adresirani su serijskim brojem.

U tekstu ograničenja pristupa imeniku navodimo sljedeće:

Za dokument sljedeće:

"Prodaja robe WHERE #TemplateCounterparty ("Counterparty")"

Prilikom pozivanja predloška ograničenja pristupa, parametri mu se moraju proslijediti samo kao niz, tj. u navodnicima.

Glavna tablica - Nomenklatura

Tekst predloška je:

#TrenutnaTablica WHERE #TrenutnaTablica.#Parametar(1) = #Parametar(2)

Tekst predloška sadrži dio teksta na jeziku ograničenja pristupa podacima i može sadržavati parametre koji su označeni simbolom "#".

Nakon simbola "#" može slijediti:

  • Jedna od ključnih riječi:
    • Parametar iza kojeg slijedi broj parametra u predlošku u zagradama;
    • CurrentTable – označava umetanje u tekst punog naziva tablice za koju se gradi ograničenje;
    • CurrentTableName– označava umetanje u tekst punog naziva tablice (kao string vrijednosti, u navodnicima) na koju se primjenjuje instrukcija, u trenutnoj verziji ugrađenog jezika;
    • NazivTrenutniPristupPravo– sadrži naziv prava za koje se provodi trenutno ograničenje: PROČITAJ, DODAJ, UMETNI, PROMIJENI, AŽURIRAJ, BRIŠI;
  • naziv parametra predloška – označava umetanje odgovarajućeg ograničenja parametra predloška u tekst;
  • simbol “#” – označava umetanje jednog znaka “#” u tekst.

Izraz ograničenja pristupa može sadržavati:

  • Predložak ograničenja pristupa koji je naveden u formatu #TemplateName("Vrijednost parametra predloška 1", "Vrijednost parametra predloška 2",...). Svaki parametar predloška nalazi se u dvostrukim navodnicima. Ako trebate navesti znak dvostrukih navodnika u tekstu parametra, morate koristiti dva dvostruka navodnika.
  • Funkcija StrContains(WhereWeLook, WhatWeLook). Funkcija je dizajnirana za traženje pojavljivanja niza WhatWeLook u nizu WhereWeLook. Vraća True ako je pojava pronađena i False u suprotnom.
  • Operator + služi za ulančavanje nizova.

Kako biste olakšali uređivanje teksta predloška, ​​na kartici Predlošci ograničenja u obrascu uloga kliknite gumb Postavi tekst predloška. U dijaloški okvir koji se otvori unesite tekst predloška i kliknite U redu.

Ne mogu se instalirati pomoću PostaviParametar() ili nešto slično.

Parametri u ovom slučaju su:

  • Opcije sesije
  • Funkcionalne mogućnosti

Čitanje parametara sesije u zahtjevu za ograničenje pristupa događa se u privilegiranom načinu rada, to jest, bez kontrole prava za rad s njima.

Praksa 4. Pristup "vašim" ugovornim stranama

Potrebno je konfigurirati ograničenje pristupa trenutnog korisnika "njihovim" protustrankama.

Postoji direktorij „Korisnici“, imenik „Druge strane“, dokumenti s detaljima „Druga strana“.

Trenutačni korisnik trebao bi vidjeti podatke samo za one ugovorne strane za koje je s njim uspostavljena veza.

Također je potrebno konfigurirati komunikaciju.

Moguće opcije:

Uspostava veze između korisnika i druge ugovorne strane

  • Detalji u direktoriju ugovornih strana
  • Registar informacija

Moguća rješenja problema:

  • Pohranjivanje korisnika u konstantu je loša opcija; konstanta je dostupna svim korisnicima.
  • Pohranjivanje fiksnog niza protustranaka trenutnog korisnika u parametrima sesije nije baš dobra opcija; može postojati mnogo protustranaka
  • Pohranjivanje parametara sesije trenutnog korisnika, zatim traženje popisa "njegovih" partnera prihvatljiva je opcija.
  • Druge opcije.

Riješenje.

Kreirajmo novi parametar sesije "CurrentUser" i ispunimo ga u modulu sesije.

Kreirajmo registar informacija “Usklađenost upravitelja i izvođača”

Kreirajmo novu ulogu iu njoj novo ograničenje pristupa za dokument “Račun”.

U tekstu zahtjeva spojit ćemo glavnu tablicu s informacijskim registrom za Account = Account i Manager = &CurrentUser. Vrsta veze Interni.

Ako je moguće, bolje je izbjegavati ugniježđene upite u tekstovima ograničenja pristupa, jer će se izvršiti svaki put kada se podaci iz ovog objekta pročitaju iz baze podataka.

Provjera - ograničenja rade

*Značajka: Ako promijenite popis korisničkih ugovornih strana u registru, ograničenja pristupa stupaju na snagu odmah bez ponovnog pokretanja korisničke sesije.

Praksa 5. Datum zabrane promjena.

Potrebno je provesti ograničenje uređivanja podataka prije utvrđenog datuma zabrane izmjena.
Morate ga ograničiti za korisnike.

Kreirajmo registar informacija “Datumi zabrane promjena” s dimenzijom Korisnik, resurs Datum zabrane.

Izgradimo logiku rješenja na ovaj način:

  • ako korisnik nije naveden, zabrana se odnosi na sve korisnike
  • ako postoji ograničenje za sve korisnike i ograničenje za pojedinog korisnika, onda se ograničenje primjenjuje za pojedinog korisnika, a za ostale prema općem načelu.

Očito, takvo se ograničenje može konfigurirati za objekte baze podataka koji imaju neki položaj na vremenskoj osi. To može biti

  • Dokumentacija
  • Registri periodičnih informacija

Kreirajmo novu ulogu “Ograničenja prema datumu zabrane promjena”.

U njemu ćemo za dokument “Račun” za pravu “promjenu” dodati novo ograničenje pristupa.

Određujemo postavku za sva polja.

Tekst ograničenja je:

Račun Račun FROM Document. Račun Račun KAO Račun Račun

Promjena datuma zabrane. Datum zabrane KAO datum zabrane
IZ

UNUTARNJI SPOJ (ODABIR
MAX(Promijeni zabranjene datume.Korisnik) KAO korisnik
IZ
Registar informacija Datumi zabrane promjena KAO Datumi zabrane promjena
GDJE
(Promijeni zabranjene datume.Korisnik = &Trenutnikorisnik
ILI Datumi zabranjenih promjena.Korisnik = VRIJEDNOST(Imenik.korisnici.Prazna veza))) AS VZ_Korisnik
PO Datumu zabrane promjena.Korisnik = VZ_Korisnik.Korisnik) AS NestedQuery
Račun. Datum računa za softver > Datum ugniježđenog upita. Zabrana

Provjerimo - ograničenje djeluje.

Korištenje uputa pretprocesora

#Ako Uvjet1 #Tada

Fragment zahtjeva 1

#ElseIf Condition2 #Then

Fragment zahtjeva 2

#Inače

Fragment zahtjeva 3

#Završi ako

U uvjetima možete koristiti logičke operacije (i, ili, ne, itd.) i pristup parametrima sesije.

Ovaj pristup u kontekstu konstruiranja ograničenja pristupa pogodan je po tome što će se, ovisno o uvjetima, sastaviti kraći tekst zahtjeva. Jednostavniji upit manje opterećuje sustav.

Loša strana je što konstruktor upita neće raditi s takvim tekstom.

*Posebnost:

Za razliku od uputa pretprocesoru ugrađenog jezika u tekstovima ograničenja pristupa, prije operatora Onda morate staviti hash - #Zatim

Vježba 6. Prebacite "Use RLS"

Dopunimo naš sustav ograničenja s prekidačem koji uključuje/isključuje korištenje ograničenja na rekordnoj razini.

Da bismo to učinili, dodat ćemo konstantu i parametar sesije pod nazivom "UseRLS".

Upišimo u Modul sesije da postavimo vrijednost parametra sesije iz vrijednosti konstante.

Dodajmo sljedeći kod svim tekstovima ograničenja pristupa:

“#If &UseRLS #Then….. #EndIf”

Provjeravamo - sve radi.

Međutim, sada nakon uključivanja oznake "koristi radar", promjene neće odmah stupiti na snagu. Zašto?

Budući da je parametar sesije postavljen kada se sesija pokrene.

Moguće je postaviti da se vrijednost parametra sesije poništi kada se zapiše nova konstantna vrijednost, ali to će raditi samo za trenutnu korisničku sesiju. Ostali korisnici trebali bi biti upitani da ponovno pokrenu sustav.


Kraj prvog dijela.

RLS mehanizam u 1C (ograničenja pristupa na razini zapisa) omogućuje programeru postavljanje vlastitih odabira i uvjeta izravno na tablice baze podataka. Takva se ograničenja mogu odnositi na čitanje, dodavanje, mijenjanje i brisanje.

Glavni nedostatak metode je smanjenje performansi sustava u cjelini. Poanta je da se dodatni odabiri dodaju glavnim upitima koji dinamički dohvaćaju podatke. Svaki put kada korisnik pristupi bilo kojem podatku u infobazi koji podliježe ograničenju, program će izvršiti provjeru izvršavanjem upita.

Unatoč ovom značajnom nedostatku, RLS mehanizam je prilično zgodan i fleksibilan. Uz njegovu pomoć možete konfigurirati sustav tako da niti jedan korisnik ne vidi ništa "nepotrebno". Ograničavanje pristupa vašim zaposlenicima, pogotovo ako ih ima mnogo, vrlo je produktivno. Nije poanta toliko nepovjerenje, koliko zaštita od slučajnih pogrešaka i ljudskog faktora. Što je manje podataka dostupno, lakše je raditi s njima i ne zbuniti se.

U jednom od naših članaka već smo se djelomično dotakli teme ograničenja pristupa na rekordnoj razini. U ovom slučaju će se razmotriti dublja konfiguracija od strane programera.

Konfiguriranje početnih ograničenja pristupa

Konfiguracija i razvoj radara vrši se u 1C konfiguratoru. Da biste to učinili, prvo stvorite ulogu u grani metapodataka.

Na kartici "Predlošci ograničenja" možete izraditi jedan ili više takvih predložaka. Izvana se praktički ne razlikuju od uobičajenih zahtjeva.

Zatim idite na karticu "Prava" uloge za koju želite postaviti ograničenje. Radi praktičnosti, možete koristiti dizajner upita koji ima samo dvije kartice "Tablice i polja" i "Uvjeti".

Kao što možete vidjeti na slici ispod, dodali smo samo jedno ograničenje s tekstom:

WHEREProductGroup = &ProductGroup

Kao rezultat toga, kada korisnik pristupi imeniku "Nomenklatura", program će svim zahtjevima dodati redak s ovim uvjetom.

Sve postavke korisničkih prava koje ćemo napraviti u okviru ovog članka nalaze se u odjeljku 1C 8.3 “Administracija” - “Postavke korisnika i prava”. Ovaj je algoritam sličan u većini konfiguracija na upravljanim obrascima. Kao primjer poslužit će program 1C Računovodstvo, no postavljanje prava u drugim programima (1C UT 11, 1C ZUP 3, 1C ERP) radi se na potpuno isti način.

Idemo u odjeljak "Korisnici" u prozoru postavki. Ovdje vidimo dvije hiperveze: “Korisnici” i “Postavke prijave”. Prvi od njih omogućuje vam da idete izravno na popis korisnika ove baze podataka. Prije kreiranja novog korisnika, pogledajmo moguće postavke prijave (hiperveza s desne strane).

U ovom obrascu postavki možete konfigurirati složenost lozinke (najmanje 7 znakova, obavezan sadržaj raznih vrsta znakova itd.). Također možete odrediti duljinu lozinke, rok valjanosti te zabraniti korisnicima prijavu u program ako nisu bili aktivni određeno vrijeme.

Sada možete izravno nastaviti s dodavanjem novog korisnika u 1C. To možete učiniti klikom na gumb "Stvori", kao što je prikazano na slici ispod.

Prije svega, navest ćemo puno ime - "Dmitry Petrovich Antonov", i odabrati pojedinca iz odgovarajućeg imenika. Ovdje također možete naznačiti odjel u kojem naš zaposlenik radi.

Ime za prijavu “AntonovDP” automatski je zamijenjeno skraćenicom za puno ime “Dmitry Petrovich Antonov”. Postavimo lozinku i autentifikaciju 1C Enterprise. Ovdje također možete naznačiti može li ovaj korisnik samostalno promijeniti svoju lozinku.

Recimo da želimo da Dmitry Petrovich Antonov bude dostupan na popisu za odabir prilikom pokretanja ove baze podataka. Da biste to učinili, morate postaviti potvrdni okvir na stavku "Prikaži na popisu za odabir". Kao rezultat toga, prozor autorizacije prilikom pokretanja programa izgledat će kao što je prikazano na slici ispod.

Obratimo pozornost na još jednu važnu postavku na kartici korisničkog imenika - "Dopuštena je prijava u program." Ako kašnjenje nije postavljeno, tada korisnik jednostavno neće moći ući u ovu informacijsku bazu.

Prava pristupa

Nakon popunjavanja svih podataka u korisničkoj kartici - Dmitry Petrovich Antonov, zapisati ćemo ih i prijeći na postavljanje prava pristupa, kao što je prikazano na slici ispod.

Pred nama se otvorio popis pristupnih profila prethodno unesenih u program. Označite okvire koji su potrebni.

Pristupite grupnim profilima

Profili pristupnih grupa mogu se konfigurirati iz glavnog obrasca za postavljanje korisnika i prava. Idite na odjeljak "Grupe pristupa" i kliknite na hipervezu "Profili grupa pristupa".

Kreirajmo novu grupu iz obrasca popisa koji se otvori. U tabelarnom odjeljku na kartici “Dopuštene radnje (uloge)” potvrdite okvire za one uloge koje će utjecati na prava pristupa korisnika uključenih u grupu koju stvaramo. Sve te uloge kreiraju se i konfiguriraju u konfiguratoru. Ne mogu se mijenjati ili stvarati novi iz korisničkog načina rada. Možete birati samo s postojećeg popisa.

RLS: Ograničenje pristupa na razini zapisa

Omogućuje vam fleksibilnije konfiguriranje pristupa programskim podacima u određenim područjima. Za aktiviranje označite istoimeni okvir na obrascu postavki korisnika i prava.

Imajte na umu da omogućavanje ove postavke može negativno utjecati na performanse sustava. Stvar je u tome da RLS mehanizam modificira sve zahtjeve ovisno o postavljenim ograničenjima.

Idemo na profil pristupne grupe "Testna grupa" koji smo izradili ranije. Slika ispod pokazuje da se nakon omogućavanja ograničenja pristupa na razini zapisa pojavila dodatna kartica "Ograničenja pristupa".

Recimo da želimo da korisnici dodijeljeni testnoj grupi imaju pristup podacima za sve organizacije u ovoj informacijskoj bazi, osim za one navedene u profilu.

U gornjem tabličnom dijelu postavit ćemo ograničenja pristupa po organizaciji. U donjem dijelu ćemo pojasniti da pristup podacima (dokumentima, imenicima, itd.) neće biti omogućen za organizaciju “Roga LLC”.

RLS- ovo je sposobnost programera da postavi uvjete na tablice baze podataka za određene korisnike (grupe korisnika) i spriječi ih da vide nepotrebne stvari. Uvjet je boolean tipa. Ako se uvjet ocijeni istinitim, tada je pristup dopušten, u suprotnom je odbijen.

RLS se koristi istovremeno s postavljanjem normalnih prava pristupa. Stoga, prije nego počnete konfigurirati RLS, trebate dodijeliti redovita prava konfiguracijskim objektima.

RLS se koristi za sljedeće vrste prava pristupa:

  • Čitanje
  • Dodatak
  • Promijeniti
  • Uklanjanje

Kako konfigurirati RLS

Pogledajmo jednostavan primjer kako ga konfigurirati. Snimke zaslona su snimljene na verziji 1C Enterprise 8.2 (8.2.9.356). Sintaksa tekstualnih predložaka ograničenja opisana je u dokumentaciji za 8.2 u knjizi “Developer's Guide. 1. dio", pa se nećemo zadržavati na tome.

Dakle, prvi korak je definiranje predložaka ograničenja za svaku postojeću ulogu.

Nakon toga, na temelju navedenih predložaka, postavljaju se ograničenja na potrebne objekte. Za uređivanje teksta uvjeta možete koristiti dizajner ograničenja pristupa podacima.

Za uređivanje više uloga prikladno je upravljati kroz prozor "Sve uloge".

Možete koristiti prozor All Access Restrictions za kopiranje uvjeta na druge uloge. Predlošci se mogu samo ručno kopirati na druge uloge.

To je sve. Možete provjeriti rezultat.

Nedostaci korištenja RLS-a:

  1. Korištenje mehanizma ograničenja pristupa na razini zapisa dovodi do implicitnog povećanja tablica koje sudjeluju u upitu, što može dovesti do pogrešaka u klijent-poslužiteljskom načinu baze podataka.
  2. Može biti teško ili nemoguće implementirati složenu logiku aplikacije za kontrolu pisanja. U takvim slučajevima, bolje je koristiti uvjete u proceduri OnWrite().
  3. Pisanje uvjeta (upita) zahtijeva određene kvalifikacije programera.
  4. Dodatne poteškoće može stvoriti nemogućnost debugiranja uvjeta (upita).

U tipičnim konfiguracijama, prava na razini zapisa mogu se postaviti interaktivno za sljedeće objekte: organizacije, ugovorne strane, stavke, skladišta, odjele, pojedince, prijave kandidata i druge.

Treba imati na umu da su ograničenja prava pristupa na razini zapisa prilično intenzivan mehanizam i što su složenija ograničenja postavljena, program će sporije raditi, posebno s velikom bazom podataka.

Najbolji članci na temu