Aktuell användare av 1s 8.3 på klienten. Hur man får information om konfigurationsroller

Parametrarna som övervägs i 1C:Enterprise presenteras som ett metadataobjekt. I huvudsak är det inget annat än en global variabel som är bunden till den aktuella sessionen.

En global variabel är samma variabel som alla andra, men dess egenhet är att den kan nås från var som helst i programmet, och i fallet med en sessionsparameter fungerar detta bara inom den aktuella sessionen.

Eftersom den sessionsparameterär ett metadataobjekt har det vissa funktioner:

  • Det kan vara av en viss typ. De tillåtna typerna bestäms av plattformen. Listan över dem är ganska omfattande, men även om i denna lista det finns inget behov för dig, du kan alltid serialisera värdet och lagra det i en parameter som en sträng.
  • Rättigheterna till det, som till alla andra metadataobjekt, kan begränsas av roller (både skrivande och läsning). Det finns dock en egenhet när du använder den i RLS, men detta kommer att diskuteras nedan.
  • Den har en gräns för mängden data som kan placeras i serialiserad form. Deras volym bör inte överstiga 4 GB.

Om sessionsparametertypen är:

  • FixedArray
  • FixedCollection
  • Fast struktur

Då kan värdet av samlingselementet vara Odefinierad.

Huvudområdet för parametrar är användningen av deras värden i RLS-frågor (Record Level Access Restriction).

Till exempel måste vi ställa in ett villkor för den aktuella användaren i RLS-förfrågan. För att göra detta ställer vi in ​​sessionsparametern "CurrentUser" och ställer in värdet från den inbyggda språkkoden:

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

Table.User = &CurrentUser

När du använder sessionsparametern på det här sättet tas inte hänsyn till läsbehörigheter för parametern, men du kan försöka få deras värde från det inbyggda språket:

CurrentUser = SessionParameters.CurrentUser;


Du kan ställa in en sessionsparameter, det vill säga dess värde, endast programmatiskt och endast på servern. För att göra detta måste du anropa en serverprocedur från klienten. Vid åtkomst till en sessionsparameter (inställning, mottagning), om parametern inte initieras, kommer proceduren att anropas SettingSessionParameters i sessionsmodulen. Denna procedur har en parameter Erforderliga parametrar– en uppsättning av identifierare för sessionsparametrar. SettingSessionParameters kallas även när man upprättar en förbindelse med informationsbas innan du ringer alla andra hanterare. I detta fall Erforderliga parametrar kommer att vara lika Odefinierad.

Det rekommenderas att använda fördröjd (lat) initiering, det vill säga initiera sessionsparametrar på begäran och inte vid systemstart, eftersom inte alla sessionsparametrar krävs direkt vid systemstart. Lazy initiering görs så här:

Procedur SettingSessionParameters(SessionParametersNames) Om SessionParametersNames är Odefinierat Then If ParameterName = "CurrentUser" Then SessionParameters.CurrentUser = ; ElseIf ParameterName = "CurrentOrganization" ThenSessionParameters.CurrentOrganization = ; // etc. endIf; endIf; EndProcedurevalue>value>>

Eftersom sessionsparametern är bunden till sessionen kommer du inte att kunna komma åt sessionsparametern från en metod som körs i bakgrunden eftersom det kommer att vara en annan session. Denna nyans kan komma som en överraskning, så det är bättre att förbereda sig för det i förväg genom att skicka det önskade värdet som en metodparameter och initiera det från sessionsparametern i början av proceduren.

  • AKTUELLA UTSLÄPP 1C
  • EXEMPEL PÅ KODER PÅ 1C-PLATTFORMEN
Roller, åtkomsträttigheter i 1C 8.x
Hur vet jag om en viss roll är tillgänglig för den aktuella användaren?
If Not RollAvailable("Manager") Then Report("Visa förfrågningar från kunder är inte tillåtet!"); endIf;
Hur får jag information om konfigurationsroller?
Funktionslista över möjliga rollerConfiguration() Lista över roller = ny lista över värden; RolesConfiguration = Metadata.Roles; För varje roll från RoleConfiguration Loop RoleList.Add(Role.Name); EndCycle; returnListRole; EndFunction
Hur kör man kod utan att kontrollera behörigheter?
1. Använd privilegierad modul 2. Placering programkod, som måste exekveras UTAN KONTROLL AV BEGRÄNSNINGAR, till en gemensam modul med PRIVILEGE-flaggan inställd för modulen. Använd ett privilegierat läge för exekvering av programkod Liknande arbetssättet för kod för privilegierade moduler. Läget kan slås på/av med det inbyggda språket: SetPrivilegedMode(<Включить>) Parameter<Включить>(obligatoriskt) Typ: Boolean. Bestämmer om privilegierat läge ska aktiveras: True - aktivera läget; Falskt - stäng av läget. Funktionen PrivilegedMode() låter dig avgöra om privilegierat läge är aktiverat eller inte. Att använda privilegierat läge gör det för det första möjligt att påskynda arbetet, eftersom begränsningar för åtkomst till data inte kommer att införas, och för det andra låter det dig utföra operationer med data på uppdrag av användare för vilka dessa data inte är tillgängliga. Privilegerat läge rekommenderas när du logiskt behöver inaktivera behörighetskontroll, eller när du kan inaktivera behörighetskontroll för att påskynda saker och ting. Det är acceptabelt att använda privilegierat läge när arbete med data på uppdrag av en viss användare inte bryter mot de åtkomsträttigheter som fastställts för denna användare.

5
När mer krävs finjustering tillgång kommer RLS - Record Level Security-mekanismen till undsättning. Systemkonfigurationer "1C:Enterprise" 8 positionerades från början som ett program för redovisning av flera företag, och en av... 3
Från och med plattform 8.0 i 1C Enterprise-systemet är det möjligt att begränsa användarnas åtkomsträttigheter på postnivå. För detta ändamål används mekanismen RLS (Record Level Security). Sådan "finjustering" kan vara... 3
Jag stöter ofta på frågor ang skapande av programvara och inställningar för användarrättigheter. I den här artikeln kommer jag att ge exempel på normala och hanterade applikationer som programmatiskt skapar en användare i... 2
Fråga: Jag har lagt till en ny användare. jag skapar nytt gränssnitt(genom att kopiera ett befintligt) och ange detta gränssnitt som det huvudsakliga för denna användare. Problemet är att det nya gränssnittet skapade...