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