1c 8.3 pengguna saat ini yang bertanggung jawab. Cara mengetahui apakah peran tertentu tersedia untuk pengguna saat ini

Parameter yang dipertimbangkan dalam 1C: Perusahaan disajikan sebagai objek metadata. Pada dasarnya, ini tidak lebih dari variabel global yang terikat pada sesi saat ini.

Variabel global adalah variabel yang sama dengan yang lain, tetapi kekhasannya adalah dapat diakses dari mana saja dalam program, dan dalam kasus parameter sesi, ini hanya berfungsi dalam sesi saat ini.

Karena parameter sesi adalah objek metadata, ia memiliki fitur tertentu:

  • Itu mungkin dari jenis tertentu. Jenis yang diizinkan adalah khusus platform. Daftarnya cukup luas, tetapi meskipun daftar ini tidak berisi yang Anda butuhkan, Anda selalu dapat membuat serial nilai dan menyimpannya dalam parameter sebagai string.
  • Hak untuk itu, serta objek metadata lainnya, dapat dibatasi oleh peran (baik untuk menulis maupun membaca). Pada saat yang sama, ada keanehan saat menggunakannya di RLS, tetapi ini akan dibahas di bawah.
  • Ini memiliki batasan jumlah data yang ditempatkan dalam bentuk serial. Volumenya tidak boleh melebihi 4 GB.

Jika tipe parameter sesi:

  • FixedArray
  • Koleksi Tetap
  • Struktur Tetap

Maka nilai elemen koleksi bisa Belum diartikan.

Area utama parameter adalah penggunaan nilainya dalam permintaan RLS (pembatasan akses pada tingkat rekaman).

Misalnya, kita perlu menyetel kondisi untuk pengguna saat ini dalam permintaan RLS. Untuk melakukan ini, kami menyetel parameter sesi "Pengguna Saat Ini", dari kode bahasa bawaan, menyetel nilainya:

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

Table.User = &PenggunaAkhir

Menggunakan parameter sesi dengan cara ini tidak memperhitungkan hak baca parameter, tetapi Anda dapat mencoba mendapatkan nilainya dari bahasa bawaan:

CurrentUser = SessionParameters.CurrentUser;


Anda dapat menyetel parameter sesi, yaitu nilainya, hanya secara terprogram dan hanya di server. Untuk melakukan ini, Anda perlu memanggil prosedur server dari klien. Saat mengakses parameter sesi (pengaturan, pengambilan), jika parameter tidak diinisialisasi, prosedur akan dipanggil SettingSessionParameters dalam modul sesi. Prosedur ini memiliki satu parameter Opsi yang Diperlukan– larik pengidentifikasi parameter sesi yang akan ditetapkan. SettingSessionParameters juga dipanggil saat koneksi dibuat dengan basis informasi sebelum memanggil semua penangan lainnya. Pada kasus ini Opsi yang Diperlukan akan sama dengan Belum diartikan.

Disarankan untuk menggunakan inisialisasi yang ditangguhkan (malas), yaitu, menginisialisasi parameter sesi sesuai permintaan, dan bukan saat startup sistem, karena tidak semua parameter sesi diperlukan langsung saat startup sistem. Inisialisasi malas dilakukan seperti ini:

Prosedur SettingSessionParameters(SessionParameterNames) Jika SessionParameterNames Tidak Terdefinisi Maka IfParameterName = "CurrentUser" Maka SessionParameters.CurrentUser = ; ElseIf ParameterName = " CurrentOrganization" Kemudian SessionParameters.CurrentOrganization = ; // dll. Berakhir jika; Berakhir jika; EndProcedurenilai>nilai>>

Karena parameter sesi terikat ke sesi, maka parameter sesi tidak dapat diakses dari metode yang berjalan di latar belakang, karena ini akan menjadi sesi yang berbeda. Nuansa ini bisa mengejutkan, jadi yang terbaik adalah mempersiapkannya terlebih dahulu dengan meneruskan nilai yang diinginkan sebagai parameter metode dan menginisialisasi dari parameter sesi di awal prosedur.

  • RILIS SAAT INI 1C
  • CONTOH KODE PADA PLATFORM 1C
Peran, hak akses di 1C 8.x
Bagaimana cara mengetahui apakah peran tertentu tersedia untuk pengguna saat ini?
If Not RoleAvailable("Manager") Then Report("Melihat pesanan dari pembeli tidak diperbolehkan!"); Berakhir jika;
Bagaimana cara mendapatkan informasi tentang peran konfigurasi?
Daftar Fungsi dari Kemungkinan Konfigurasi Peran() Daftar Peran = Daftar Nilai baru; ConfigRoles = Metadata.Peran; Untuk setiap Peran dari RoleConfiguration Loop ListRoles.Add(Role.Name); Akhir Siklus; Kembalikan Daftar Peran; Fungsi Akhir
Bagaimana cara mengeksekusi kode tanpa memeriksa hak?
1. Gunakan modul istimewa 2. Penempatan kode program, yang harus dijalankan TANPA KONTROL PEMBATASAN, ke dalam modul umum dengan flag PRIVILEGE yang ditetapkan untuk modul tersebut. Gunakan mode istimewa eksekusi kode program Mirip dengan mode operasi kode modul istimewa. Mode ini dapat diaktifkan/dinonaktifkan menggunakan bahasa bawaan: SetPrivilegedMode(<Включить>) parameter<Включить>(wajib) Jenis: Boolean. Menentukan apakah mode istimewa akan diaktifkan: Benar - aktifkan mode; Salah - matikan mode. fungsi PrivilegedMode() memungkinkan Anda menentukan apakah mode istimewa diaktifkan atau tidak. Menggunakan mode hak istimewa memungkinkan, pertama, untuk mempercepat pekerjaan, karena tidak akan ada batasan pada akses ke data, dan kedua, memungkinkan Anda untuk melakukan operasi dengan data atas nama pengguna yang datanya tidak tersedia. Mode hak istimewa direkomendasikan saat secara logis diperlukan untuk menonaktifkan pemeriksaan izin, atau saat Anda dapat menonaktifkan pemeriksaan izin untuk mempercepat. Diijinkan untuk menggunakan mode istimewa saat bekerja dengan data atas nama pengguna tertentu tidak melanggar hak akses yang ditetapkan untuk pengguna ini.

Parameter sesi 1C 8.3- variabel yang menyimpan nilai parameter yang diinginkan selama durasi sesi pengguna. Faktanya, ini adalah sejenis variabel global yang terkait dengan sesi pengguna saat ini.

Menggunakan parameter sesi di 1C

Parameter sesi hanya diatur secara terprogram, tidak ada antarmuka universal untuk mengatur parameter sesi dalam sistem. Biasanya diatur saat startup sistem, di "Modul sesi". Jika parameter tidak ditentukan, kesalahan akan dimunculkan saat mengaksesnya.

Contoh pengaturan parameter sesi 1C

Mari kita lihat kasus penggunaan umum untuk parameter sesi - menyetel pengguna saat ini. Saya akan mengambil contoh dari persiapan untuk .

Di pohon metadata, mari buat parameter sesi baru - CurrentUser, tetapkan jenisnya - DirectoryReference.Individuals:

Dapatkan 267 pelajaran video 1C gratis:

Dalam modul sesi, mari buat prosedur yang akan menentukan parameter sesi saat ini:

Kode prosedur:

Pengaturan ProsedurSessionParameters(RequiredParameters) //kami mencari fisik. wajah dengan nama pengguna CurrentUser = Direktori. Individu. FindByName(UserName() ) ; // jika tidak ditemukan, buat yang baru Jika CurrentUser. Kosong() Maka Pengguna Baru = Direktori. Individu. BuatElemen() ; Pengguna baru. Nama = Nama Pengguna() ; Pengguna baru. Menulis() ; Pengguna Saat Ini = Pengguna Baru. Tautan; Berakhir jika ; //tetapkan parameter sesi CurrentUser tautan ke direktori individu Parameter Sesi. Pengguna Saat Ini = Pengguna Saat Ini; Prosedur Akhir

Memuat...
Atas