1c den nuvarande användaren kommer in på klienten. Hur man får information om konfigurationsroller

5
När mer finjustering av åtkomst krävs kommer RLS - Record Level Security-mekanismen till undsättning. Konfigurationen av 1C: Enterprise 8-systemet var ursprungligen positionerat som ett program för redovisning av flera företag, och ett av ... 3
Med utgångspunkt från 8.0-plattformen i 1C Enterprise-systemet är det möjligt att begränsa användarnas åtkomsträttigheter på postnivå. För detta används mekanismen RLS (Record Level Security). En sådan "finjustering" kan vara ... 3
Jag stöter ofta på frågor relaterade till att skapa programvara och ställa in användarrättigheter. I den här artikeln kommer jag att ge exempel för normala och hanterade applikationer som programmatiskt skapar en användare i ... 2
Fråga: Jag har lagt till en ny användare. Jag skapar ett nytt gränssnitt (genom att kopiera det befintliga) och anger detta gränssnitt som det huvudsakliga gränssnittet för denna användare. Problemet är att det skapade nya gränssnittet ...

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

En global variabel är samma variabel som vilken annan variabel som helst, men dess egenhet är att du kan referera till den var som helst i programmet, och i fallet med en sessionsparameter fungerar den bara inom den aktuella sessionen.

I den mån som sessionsparameterär ett metadataobjekt har det vissa funktioner:

  • Det kan vara av en viss typ. De tillåtna typerna är plattformsspecifika. Listan över dem är ganska omfattande, men även om den här listan inte innehåller den du behöver kan du 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 till roller (både för att skriva och läsa). Samtidigt finns det en egenhet när du använder den i RLS, men detta kommer att beskrivas nedan.
  • Den har en gräns för mängden serialiserad data som kan placeras. Deras volym bör inte överstiga 4 GB.

Om typen av sessionsparameter är:

  • FixedArray
  • Fast samling
  • Fast struktur

Då kan samlingsobjektets värde bli Odefinierad.

Huvudomfattningen av parametrar är tillämpningen av deras värden i RLS-förfrågningar (record-level access restriction).

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

Session Parameters.CurrentUser =<значение>

Table.User = & CurrentUser

Denna användning av sessionsparametern tar inte hänsyn till läsbehörigheterna för parametern, men du kan försöka få deras värde från det inbäddade språket:

CurrentUser = SessionParameters.CurrentUser;


Sessionsparametern, det vill säga dess värde, kan endast ställas in programmatiskt och endast på servern. För att göra detta måste du anropa serverproceduren från klienten. Vid åtkomst till en sessionsparameter (set, get), om parametern inte initieras, kommer proceduren att anropas SettingSessionParameters i sessionsmodulen. Denna procedur har en parameter. Erforderliga parametrar- en rad uppsättningsidentifierare för sessionsparametrar. SettingSessionParameters Det kallas också när en anslutning till en infobas upprättas, innan alla andra hanterare anropas. I detta fall Erforderliga parametrar kommer att vara lika Odefinierad.

Det rekommenderas att använda uppskjuten (lat) initiering, det vill säga att 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 (SessionParameterNames) Om SessionParameterNames är odefinierade Then If ParameterName = "CurrentUser" Then SessionParameters.CurrentUser =; ElseIf ParameterName = "CurrentOrganization" Då SessionParameters.CurrentOrganization =; // etc. EndIf; EndIf; EndProcedure value> value >>

Eftersom sessionsparametern är bunden till sessionen kommer det inte att vara möjligt att komma åt sessionsparametern från metoden som körs i bakgrunden, eftersom detta redan 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.

Parametersessioner 1C 8.3- en variabel som lagrar värdet på den önskade parametern under användarens session. I själva verket är detta en sorts global variabel kopplad till sessionen för den aktuella användaren.

Använda sessionsparametrar i 1C

Sessionsparametrar ställs endast in programmatiskt, det finns inget universellt gränssnitt för inställning av sessionsparametrar i systemet. Vanligtvis ställs de in vid systemstart, i "Sessionsmodulen". Om parametern inte är definierad kommer ett fel att visas under anropet till den.

Ett exempel på inställning av en 1C-sessionsparameter

Låt oss titta på ett typiskt användningsfall för sessionsparametrar - inställning av den aktuella användaren. Jag ska ta ett exempel från förberedelserna för.

Skapa en ny sessionsparameter i metadataträdet - CurrentUser, tilldela den en typ - ReferenceLink.

Få 267 1C videohandledning gratis:

I sessionsmodulen kommer vi att skapa en procedur där den aktuella sessionsparametern bestäms:

Procedurkod:

Procedur för att ställa in sessionsparametrar (RequiredParameters) // letar efter fysiska. ansikte efter användarnamn CurrentUser = Kataloger. Individer. FindByDesign (Användarnamn ()); // om den inte hittas, skapa en ny Om CurrentUser. Tom () Sedan NewUser = Kataloger. Individer. SkapaElement (); Ny användare. Namn = Användarnamn (); Ny användare. Skriv (); CurrentUser = NewUser. Länk; EndIf; // tilldela sessionsparametern CurrentUser en länk till referensen för individer Sessionsparametrar. CurrentUser = CurrentUser; Slut på procedur
Roller, åtkomsträttigheter i 1C 8.x
Hur vet jag om en specifik roll är tillgänglig för den aktuella användaren?
Om ingen roll är tillgänglig ("Manager"), rapportera ("Visa förfrågningar från köpare är inte tillåtet!"); EndIf;
Hur får jag information om konfigurationsroller?
FunctionPossibleConfigurationPossibleRoles () RoleList = newList of Values; RolesConfigurations = Metadata.Roles; För varje roll från RoleConfiguration Cycle Roll List.Add (Role.Name); Slut på cykeln; Returnera rolllista; EndFunction
Hur kan jag köra kod utan att kontrollera rättigheter?
1. Använd en privilegierad modul 2. Placering av programkoden som måste exekveras UTAN BEGRÄNSNINGSKONTROLL i en gemensam modul med den PRIVILEGERADE flaggan inställd för modulen. Använd det privilegierade exekveringssättet för programkoden Liknande driftsättet för koden för privilegierade moduler. Läget kan aktiveras/avaktiveras med hjälp av det inbyggda språket: Ställ in föredraget läge (<Включить>) Parameter<Включить>(obligatoriskt) Typ: Boolean. Bestämmer om det privilegierade läget ska vara aktiverat: 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 det privilegierade läget gör det för det första möjligt att påskynda arbetet, eftersom det inte kommer att finnas några begränsningar för åtkomst till data, och för det andra låter det dig utföra operationer med data på uppdrag av användare som inte har tillgång till dessa data. Det rekommenderas att använda det privilegierade läget när du ur logisk synvinkel behöver inaktivera kontroll av rättigheter, eller när du kan inaktivera kontroll av rättigheter för att påskynda ditt arbete. Det är tillåtet att använda det privilegierade läget när man arbetar med data för en viss användares räkning inte bryter mot åtkomsträttigheterna för denna användare.