1c 8.3 Verantwortlicher aktueller Benutzer. So finden Sie heraus, ob eine bestimmte Rolle für den aktuellen Benutzer verfügbar ist

Die in 1C:Enterprise betrachteten Parameter werden als Metadatenobjekt dargestellt. Im Wesentlichen ist es nichts anderes als eine globale Variable, die an die aktuelle Sitzung gebunden ist.

Eine globale Variable ist dieselbe Variable wie jede andere, aber ihre Besonderheit besteht darin, dass von überall im Programm auf sie zugegriffen werden kann, und im Fall eines Sitzungsparameters funktioniert dies nur innerhalb der aktuellen Sitzung.

Weil das Sitzungsparameter ein Metadatenobjekt ist, hat es bestimmte Eigenschaften:

  • Es kann von einem bestimmten Typ sein. Die zulässigen Typen sind plattformspezifisch. Die Liste davon ist ziemlich umfangreich, aber selbst wenn diese Liste nicht die benötigte enthält, können Sie den Wert immer serialisieren und als Zeichenfolge im Parameter speichern.
  • Die Rechte daran, wie auch an jedem anderen Metadatenobjekt, können durch Rollen eingeschränkt werden (sowohl zum Schreiben als auch zum Lesen). Gleichzeitig gibt es eine Besonderheit bei der Verwendung in RLS, auf die weiter unten eingegangen wird.
  • Die Menge der in serialisierter Form abgelegten Daten ist begrenzt. Ihr Volumen sollte 4 GB nicht überschreiten.

Wenn Sitzungsparametertyp:

  • FixedArray
  • FixedCollection
  • FesteStruktur

Dann kann der Wert des Sammlungselements sein Nicht definiert.

Der Hauptbereich von Parametern ist die Verwendung ihrer Werte in RLS-Anfragen (Einschränkung des Zugriffs auf Datensatzebene).

Beispielsweise müssen wir in einer RLS-Anforderung eine Bedingung für den aktuellen Benutzer festlegen. Dazu setzen wir den Sitzungsparameter "CurrentUser", aus dem Code der eingebauten Sprache den Wert:

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

Table.User = &AktuellerBenutzer

Die Verwendung des Sitzungsparameters auf diese Weise berücksichtigt nicht die Leserechte des Parameters, aber Sie können versuchen, ihren Wert aus der integrierten Sprache zu erhalten:

AktuellerBenutzer = Sitzungsparameter.AktuellerBenutzer;


Sie können einen Sitzungsparameter, d. h. seinen Wert, nur programmgesteuert und nur auf dem Server festlegen. Dazu müssen Sie vom Client aus eine Serverprozedur aufrufen. Beim Zugriff auf einen Sitzungsparameter (Einstellung, Abruf) wird die Prozedur aufgerufen, wenn der Parameter nicht initialisiert ist SettingSessionParameters im Sitzungsmodul. Diese Prozedur hat einen Parameter Erforderliche Optionen– ein Array von Sitzungsparameter-IDs, die festgelegt werden sollen. SettingSessionParameters wird auch beim Verbindungsaufbau mit aufgerufen Informationsbasis bevor alle anderen Handler aufgerufen werden. In diesem Fall Erforderliche Optionen wird gleich sein Nicht definiert.

Es wird empfohlen, die verzögerte (träge) Initialisierung zu verwenden, d. h. Sitzungsparameter bei Bedarf und nicht beim Systemstart zu initialisieren, da nicht alle Sitzungsparameter direkt beim Systemstart benötigt werden. Lazy Initialisierung wird wie folgt durchgeführt:

Prozedur SettingSessionParameters(SessionParameterNames) If SessionParameterNames is Undefined Then IfParameterName = "CurrentUser" Then SessionParameters.CurrentUser = ; ElseIf ParameterName = "CurrentOrganization" Then SessionParameters.CurrentOrganization = ; // usw. EndIf; EndIf; EndProcedureWert>Wert>>

Da der Sitzungsparameter an die Sitzung gebunden ist, ist es nicht möglich, von einer im Hintergrund laufenden Methode auf den Sitzungsparameter zuzugreifen, da es sich um eine andere Sitzung handelt. Diese Nuance kann überraschen, also bereiten Sie sich am besten im Voraus darauf vor, indem Sie den gewünschten Wert als Methodenparameter übergeben und zu Beginn der Prozedur von einem Sitzungsparameter initialisieren.

  • AKTUELLE VERÖFFENTLICHUNGEN 1C
  • CODEBEISPIELE AUF DER 1C-PLATTFORM
Rollen, Zugriffsrechte in 1C 8.x
Wie kann ich herausfinden, ob eine bestimmte Rolle für den aktuellen Benutzer verfügbar ist?
If Not RoleAvailable("Manager") Then Report("Das Anzeigen von Bestellungen von Käufern ist nicht erlaubt!"); EndIf;
Wie erhalte ich Informationen zu Konfigurationsrollen?
Funktion Liste möglicher Konfigurationsrollen() Rollenliste = neue Werteliste; ConfigRoles = Metadaten.Rollen; Für jede Rolle aus RoleConfiguration Loop ListRoles.Add(Role.Name); EndCycle; Liste der Rollen zurückgeben; Endfunktionen
Wie kann ich Code ausführen, ohne die Rechte zu prüfen?
1. Verwenden Sie privilegiertes Modul 2. Platzierung Programmcode, die OHNE EINSCHRÄNKUNGSSTEUERUNG ausgeführt werden sollte, in ein gemeinsames Modul, wobei das PRIVILEGE-Flag für das Modul gesetzt ist. Privilegierten Modus der Programmcode-Ausführung verwenden Ähnlich der Funktionsweise des Codes privilegierter Module. Der Modus kann mit der eingebauten Sprache aktiviert/deaktiviert werden: SetPrivilegedMode(<Включить>) Parameter<Включить>(erforderlich) Typ: Boolesch. Legt fest, ob der privilegierte Modus aktiviert wird: True – aktiviert den Modus; False - Deaktivieren Sie den Modus. Mit der Funktion PrivilegedMode() können Sie feststellen, ob der privilegierte Modus aktiviert ist oder nicht. Durch die Verwendung des privilegierten Modus können Sie erstens die Arbeit beschleunigen, da der Zugriff auf Daten nicht eingeschränkt ist, und zweitens können Sie Vorgänge mit Daten im Namen von Benutzern ausführen, denen diese Daten nicht zur Verfügung stehen. Der privilegierte Modus wird empfohlen, wenn es logischerweise notwendig ist, Berechtigungsprüfungen zu deaktivieren, oder wenn Sie Berechtigungsprüfungen deaktivieren können, um die Arbeit zu beschleunigen. Es ist zulässig, den privilegierten Modus zu verwenden, wenn das Arbeiten mit Daten im Auftrag eines bestimmten Benutzers die für diesen Benutzer festgelegten Zugriffsrechte nicht verletzt.

Sitzungsparameter 1C 8.3- eine Variable, die den Wert speichert gewünschten Parameter für die Dauer der Benutzersitzung. Tatsächlich ist dies eine Art globale Variable, die an die Sitzung des aktuellen Benutzers gebunden ist.

Verwenden von Sitzungsparametern in 1C

Sitzungsparameter werden nur programmgesteuert festgelegt, es gibt keine universelle Schnittstelle zum Festlegen von Sitzungsparametern im System. Normalerweise werden sie beim Systemstart im "Sitzungsmodul" festgelegt. Wenn der Parameter nicht definiert ist, wird beim Zugriff darauf ein Fehler ausgegeben.

Ein Beispiel für die Einstellung des Sitzungsparameters 1C

Sehen wir uns einen typischen Anwendungsfall für Sitzungsparameter an – das Festlegen des aktuellen Benutzers. Ich nehme ein Beispiel aus der Vorbereitung auf .

Lassen Sie uns in der Metadatenstruktur einen neuen Sitzungsparameter erstellen – CurrentUser, und ihm einen Typ zuweisen – DirectoryReference.Individuals:

Erhalten Sie 267 kostenlose 1C-Videolektionen:

Lassen Sie uns im Sitzungsmodul eine Prozedur erstellen, die den aktuellen Sitzungsparameter bestimmt:

Verfahrenscode:

Prozedur SettingSessionParameters(RequiredParameters) //wir suchen körperliche. Gesicht nach Benutzernamen CurrentUser = Verzeichnisse. Einzelpersonen. FindByName(Benutzername() ) ; // wenn nicht gefunden, erstelle ein neues Wenn CurrentUser. Empty() Dann NewUser = Verzeichnisse. Einzelpersonen. ErzeugeElement() ; Neuer Benutzer. Name = Benutzername(); Neuer Benutzer. Schreiben() ; AktuellerBenutzer = NeuerBenutzer. Verknüpfung; EndIf ; // Weisen Sie dem Sitzungsparameter CurrentUser einen Link zum Personenverzeichnis zu Sitzungsparameter. AktuellerBenutzer = AktuellerBenutzer; EndProzedur

Wird geladen...
Spitze