1c motta gjeldende bruker på klienten

5
Når det kreves mer finjustert tilgang, kommer det til unnsetning RLS mekanisme- Sikkerhet på rekordnivå. 3
Systemkonfigurasjoner "1C:Enterprise" 8 ble opprinnelig posisjonert som et program for regnskap for flere selskaper, og en av... 3
Fra og med plattform 8.0 i 1C Enterprise-systemet er det mulig å begrense brukertilgangsrettigheter på postnivå. For dette formålet brukes RLS-mekanismen (Record Level Security). Slik "fin" tuning kan være ... Jeg kommer ofte over spørsmål vedr programvareoppretting og brukerrettighetsinnstillinger. I denne artikkelen vil jeg gi eksempler for Normal og Administrerte applikasjoner 2
, som programmatisk oppretter en bruker i...

Spørsmål: Jeg har lagt til en ny bruker.

Jeg oppretter et nytt grensesnitt (ved å kopiere et eksisterende) og spesifiserer dette grensesnittet som det viktigste for denne brukeren.

Problemet er at det nye grensesnittet opprettet... Parametrene som vurderes i 1C:Enterprise presenteres som et metadataobjekt. I hovedsak er det ikke noe mer enn en global variabel som er bundet til den gjeldende økten. En global variabel er den samme variabelen som alle andre, men dens særegenhet er at den kan nås fra hvor som helst i programmet, og når det gjelder en sesjonsparameter, fungerer denne kun innenfor gjeldende sesjon.

  • Tillatte typer bestemmes av plattformen. Listen over dem er ganske omfattende, men selv om i
  • denne listen det er ikke nødvendig for deg, du kan alltid serialisere verdien og lagre den i en parameter som en streng.

Rettigheter til det, som til alle andre metadataobjekter, kan begrenses av roller (både skriving og lesing).

  • Det er imidlertid en særegenhet når du bruker det i RLS, men dette vil bli diskutert nedenfor.
  • Den har en grense for mengden data som kan plasseres i serialisert form.
  • Volumet deres bør ikke overstige 4 GB.

Hvis sesjonsparametertypen er: FixedArray

FixedCollection

For eksempel må vi sette en betingelse for gjeldende bruker i RLS-forespørselen. For å gjøre dette setter vi opp «CurrentUser»-sesjonsparameteren og setter verdien fra den innebygde språkkoden:

SessionParameters.CurrentUser =<значение>

Table.User = &CurrentUser

Når du bruker sesjonsparameteren på denne måten, tas det ikke hensyn til lesetillatelser for parameteren, men du kan prøve å hente verdien fra det innebygde språket:

CurrentUser = SessionParameters.CurrentUser;


Du kan angi en sesjonsparameter, det vil si verdien, bare programmatisk og kun på serveren. For å gjøre dette, må du ringe en serverprosedyre fra klienten. Ved tilgang til en sesjonsparameter (innstilling, mottak), hvis parameteren ikke er initialisert, vil prosedyren bli kalt SettingSessionParameters i øktmodulen. Denne prosedyren har én parameter Nødvendige parametere– en rekke angitte sesjonsparameteridentifikatorer. SettingSessionParameters kalles også ved etablering av forbindelse med informasjonsgrunnlag før du ringer alle andre behandlere. I dette tilfellet Nødvendige parametere vil være lik FixedArray

Det anbefales å bruke forsinket (lat) initialisering, det vil si initialisere sesjonsparametere på forespørsel, og ikke ved systemoppstart, siden ikke alle sesjonsparametere kreves direkte ved systemoppstart. Lazy initialisering gjøres slik:

Prosedyre SettingSessionParameters(SessionParametersNames) Hvis SessionParametersNames er Undefined Then If ParameterName = "CurrentUser" Then SessionParameters.CurrentUser = ;

ElseIf ParameterName = "CurrentOrganization" ThenSessionParameters.CurrentOrganization = ;

  • // osv.
  • endIf;
endIf;
EndProcedurevalue>value>>
Fordi sesjonsparameteren er bundet til økten, vil du ikke kunne få tilgang til sesjonsparameteren fra en metode som kjører i bakgrunnen fordi det vil være en annen økt. Denne nyansen kan komme som en overraskelse, så det er bedre å forberede seg på det på forhånd ved å sende den ønskede verdien som en metodeparameter og initialisere den fra sesjonsparameteren i begynnelsen av prosedyren.
NÅVÆRENDE UTGIFTER 1C
Funksjonsliste over mulige rollerConfiguration() Liste over roller = ny liste over verdier;
RolesConfiguration = Metadata.Roles;
For hver rolle fra RoleConfiguration Loop RoleList.Add(Role.Name); EndCycle; returnListRole; EndFunction Hvordan kjøre kode uten å sjekke tillatelser? 1. Bruk privilegert modul 2. Plassering<Включить>programkode<Включить>, som må utføres UTEN BEGRENSNINGSKONTROLL, i

felles modul med modulens PRIVILEGE-flagg satt.

Bruk en privilegert modus for utførelse av programkode I likhet med modusen for operasjon av koden til privilegerte moduler. Modusen kan slås på/av ved å bruke det innebygde språket: SetPrivilegedMode(

) Parameter

(obligatorisk) Type: boolsk. Bestemmer om privilegert modus skal aktiveres: True - aktiver modusen; False - slå av modusen. PrivilegedMode()-funksjonen lar deg bestemme om privilegert modus er aktivert eller ikke.

Bruk av privilegert modus gjør det for det første mulig å fremskynde arbeidet, siden restriksjoner på tilgang til data ikke vil bli pålagt, og for det andre lar det deg utføre operasjoner med data på vegne av brukere som disse dataene ikke er tilgjengelige for. Privilegert modus anbefales når du logisk trenger å deaktivere tillatelseskontroll, eller når du kan deaktivere tillatelseskontroll for å få fart på sakene. Det er akseptabelt å bruke privilegert modus når arbeid med data på vegne av en bestemt bruker ikke bryter med tilgangsrettighetene som er etablert for denne brukeren. 1C 8.3 øktparametere

— en variabel som lagrer verdien til den ønskede parameteren så lenge brukerøkten varer. I hovedsak er dette en slags global variabel knyttet til gjeldende brukers økt.

Bruke sesjonsparametere i 1C

Sesjonsparametere settes kun programmatisk, det er ikke noe universelt grensesnitt for innstilling av øktparametere i systemet. De settes vanligvis ved systemoppstart, i "Session Module". Hvis en parameter ikke er definert, vil det oppstå en feilmelding ved tilgang til den.

Eksempel på innstilling av en 1C-sesjonsparameter

Prosedyreinnstilling av øktparametere (påkrevde parametere) // leter etter fysisk person etter brukernavn TechUser = Kataloger. Enkeltpersoner. FinnByNavn(Brukernavn()) ; //hvis du ikke finner, lag en ny Hvis TechUser. Empty() Deretter NewUser = Kataloger. Enkeltpersoner. CreateItem() ; Ny bruker. Navn = Brukernavn() ; Ny bruker. Skriv() ; Bluetooth