1c จำกัดการเข้าถึงข้อมูลในระดับบันทึก RLS – ความยืดหยุ่นและการปรับแต่งข้อจำกัดการเข้าถึงข้อมูลอย่างละเอียด

24.05.2024

พิมพ์ (Ctrl+P)

การจำกัดการเข้าถึงข้อมูล

กลไกการจำกัดการเข้าถึงข้อมูล (หรือที่เรียกว่า RLS, Row Level Security) ช่วยให้คุณสามารถจัดการสิทธิ์การเข้าถึงได้ไม่เพียงแต่ในระดับของออบเจ็กต์เมตาดาต้าเท่านั้น แต่ยังรวมถึงระดับของออบเจ็กต์ฐานข้อมูล 1C:Enterprise อีกด้วย หากต้องการจำกัดการเข้าถึงข้อมูล คุณสามารถใช้ออบเจ็กต์ 1C:Enterprise ต่อไปนี้ได้:
● บทบาท
● พารามิเตอร์เซสชัน
● ตัวเลือกการทำงาน
● โมดูลทั่วไปที่ได้รับสิทธิพิเศษ
● คำหลักที่อนุญาตในภาษาที่ใช้ค้นหา
การแชร์ออบเจ็กต์ที่อยู่ในรายการช่วยให้เกิดความยืดหยุ่นสูงสุดเมื่อจำเป็นต้องแยกสิทธิ์การเข้าถึงข้อมูลระหว่างผู้ใช้ที่ทำหน้าที่ต่างกัน
การจำกัดการเข้าถึงข้อมูลสามารถกำหนดได้ในการดำเนินการข้อมูลต่อไปนี้ (สิทธิ์การเข้าถึง): การอ่าน (อ่านขวา) การเพิ่ม (เพิ่มขวา) การแก้ไข (เปลี่ยนขวา) และการลบ (ลบขวา) ผู้ใช้ปัจจุบันจะสามารถดำเนินการที่จำเป็นได้ในกรณีต่อไปนี้:
● สำหรับการดำเนินการอ่านและลบ อ็อบเจ็กต์ที่อยู่ในฐานข้อมูลต้องเป็นไปตามข้อจำกัดการเข้าถึงข้อมูล
● สำหรับการดำเนินการเพิ่ม ข้อจำกัดในการเข้าถึงข้อมูลจะต้องตรงกับออบเจ็กต์ที่คุณวางแผนจะเขียนลงในฐานข้อมูล
● สำหรับการดำเนินการเปลี่ยนแปลง ข้อจำกัดในการเข้าถึงข้อมูลต้องตรงกับออบเจ็กต์ทั้งก่อนการเปลี่ยนแปลง (เพื่อให้ออบเจ็กต์ถูกอ่าน) และหลังการเปลี่ยนแปลง (เพื่อให้ออบเจ็กต์ถูกเขียน)
เมื่อใช้ข้อจำกัดการเข้าถึงข้อมูล โปรดจำไว้ว่าคุณสามารถระบุได้เพียงเงื่อนไขเดียวสำหรับการดำเนินการเปลี่ยนแปลง เพิ่ม และลบ แต่สามารถระบุข้อจำกัดการเข้าถึงข้อมูลได้มากกว่าหนึ่งรายการสำหรับการดำเนินการอ่าน ซึ่งหมายความว่าสามารถตั้งค่าเงื่อนไขที่แตกต่างกันสำหรับการอ่านฟิลด์ที่แตกต่างกันของออบเจ็กต์ได้ และเมื่อตั้งค่าเงื่อนไข คุณสามารถระบุทั้งชื่อของฟิลด์เฉพาะและฟิลด์พิเศษ ฟิลด์อื่น ๆ ได้ ในกรณีแรก เงื่อนไขจะถูกนำมาใช้ก็ต่อเมื่อส่วนที่เลือก (ซึ่งอ่านข้อมูล) มีฟิลด์ที่มีการตั้งค่าข้อจำกัดไว้ และในกรณีที่สอง ข้อจำกัดจะถูกนำมาใช้กับฟิลด์ทั้งหมดของออบเจ็กต์ ยกเว้น ฟิลด์ที่มีการกำหนดข้อจำกัดไว้อย่างชัดเจน
เมื่อตั้งค่าข้อจำกัดในฟิลด์ใดฟิลด์หนึ่ง ฟิลด์นี้จะถูกอ่านหากเป็นไปตามข้อจำกัด และเมื่อตั้งค่าข้อจำกัดในฟิลด์อื่น ข้อมูลอ็อบเจ็กต์จะถูกอ่านก็ต่อเมื่อเป็นไปตามข้อจำกัดสำหรับฟิลด์ทั้งหมดของอ็อบเจ็กต์ที่รวมอยู่ใน คำขออ่านข้อมูล
สำหรับออบเจ็กต์ฐานข้อมูลประเภทต่อไปนี้ สามารถกำหนดข้อจำกัดต่างๆ กับการเปลี่ยนแปลงประเภทต่างๆ ได้ (การเพิ่ม การแก้ไข การลบ):
● แผนการแลกเปลี่ยน
● ไดเรกทอรี
● เอกสาร
● แผนสำหรับประเภทของคุณลักษณะ
● ผังบัญชี
● แผนสำหรับประเภทการคำนวณ
● กระบวนการทางธุรกิจ
● งาน
สำหรับออบเจ็กต์ฐานข้อมูลประเภทต่อไปนี้ เป็นไปได้ที่จะกำหนดข้อจำกัดในการอ่านไม่เพียงแต่ออบเจ็กต์ทั้งหมด แต่ยังรวมถึงแต่ละฟิลด์ด้วย:
● แผนการแลกเปลี่ยน
● ไดเรกทอรี
● เอกสาร
● บันทึกเอกสาร
● แผนสำหรับประเภทของคุณลักษณะ
● ผังบัญชี
● แผนสำหรับประเภทการคำนวณ
● การลงทะเบียนข้อมูล
● กระบวนการทางธุรกิจ
● งาน
ความสนใจ! เมื่อเข้าถึงฟิลด์ของออบเจ็กต์ฐานข้อมูลโดยใช้คุณสมบัติของออบเจ็กต์แอปพลิเคชันจากภาษา 1C:Enterprise ในตัว ออบเจ็กต์ทั้งหมดจะถูกอ่าน ไม่ใช่แค่ค่าของฟิลด์ที่ใช้งานอยู่ ข้อยกเว้นคือเมื่อได้รับมุมมอง เมื่ออ่านเฉพาะค่าของฟิลด์ที่เกี่ยวข้องในการสร้างมุมมองเท่านั้น
ข้อจำกัดการเข้าถึงมีอยู่ในบทบาท โดยสามารถระบุได้สำหรับออบเจ็กต์ข้อมูลเมตาส่วนใหญ่ และเขียนด้วยภาษาพิเศษที่เป็นส่วนย่อยของภาษาคิวรี

ภาษาการจำกัดการเข้าถึงข้อมูล

ข้อจำกัดในการเข้าถึงข้อมูลอธิบายไว้ในภาษาพิเศษ ซึ่งเป็นชุดย่อยของภาษาที่ใช้ในการสืบค้น (คำอธิบายโดยละเอียดของภาษาที่ใช้ในการสืบค้น ภาษาของการจำกัดการเข้าถึงข้อมูลมีการเปลี่ยนแปลงต่อไปนี้โดยสัมพันธ์กับภาษาที่ใช้ในการสืบค้น:
● ในคำขอจำกัดการเข้าถึงข้อมูล จะมีหนึ่งตารางเป็นแหล่งข้อมูลเสมอ - นี่คือตารางของออบเจ็กต์ที่ใช้ข้อจำกัดนี้ (ออบเจ็กต์หลักของข้อจำกัด)
● คำอธิบายคำขอถูกตัดให้สั้นลง ภาษาการจำกัดการเข้าถึงข้อมูลจะใช้เฉพาะส่วน FROM และ WHERE ของภาษาคิวรีเท่านั้น ดังนั้น คำอธิบายของภาษาคิวรีจึงมีลักษณะดังนี้:
เลือก [อนุญาต] [ต่างกัน] [ อันดับแรก<Количество> ]
<รายการฟิลด์ตัวเลือก>
[จาก <Список источников> ]
[ที่ไหน<Условие отбора> ]
[จัดกลุ่มตาม <Поля группировки> ]
[มี<Условие отбора> ]
[เพื่อเปลี่ยน [ <Список таблиц верхнего уровня> ]]
ในขณะที่คำอธิบายของภาษาแบบสอบถามจำกัดการเข้าถึงข้อมูลมีดังนี้:
[นามแฝงตารางของวัตถุข้อจำกัดหลัก]
[จาก <Список источников> ]
[ที่ไหน<Условие отбора> ]

ในการสืบค้นแบบซ้อนที่ใช้ในภาษาการจำกัดการเข้าถึงข้อมูล ชุดของความสามารถที่อนุญาตจะถูกจำกัด
● คุณสามารถระบุพารามิเตอร์เซสชันและตัวเลือกการทำงานเป็นองค์ประกอบเงื่อนไขได้
● ณ จุดใดก็ตามในคำขอจำกัดการเข้าถึงข้อมูล อนุญาตให้ใช้เทมเพลตที่ทำให้ข้อจำกัดในการเขียนง่ายขึ้น
ส่วนหลักของข้อจำกัดคือเงื่อนไขที่ได้รับการประเมินสำหรับแต่ละบันทึกของตารางฐานข้อมูลที่อยู่ภายใต้ข้อจำกัดการเข้าถึงข้อมูล ระเบียนจะถือว่าพร้อมใช้งานหากเป็นผลมาจากการดำเนินการของเงื่อนไขสำหรับหนึ่งระเบียนตารางของวัตถุหลักของข้อจำกัด ทำให้ได้รับตารางที่ไม่ว่างเปล่า (นั่นคือตารางที่มี 1 ระเบียนขึ้นไป) หากเงื่อนไขส่งผลให้ตารางว่างเปล่า เรกคอร์ดที่ตรงตามเงื่อนไขในลักษณะนี้จะถือว่าไม่สามารถเข้าถึงได้ นอกจากนี้ การเปลี่ยนแปลงรายการตารางของวัตถุข้อจำกัดหลัก
จะถือว่าถูกต้องหากรายการไม่ขัดแย้งกับข้อจำกัดที่ระบุไว้สำหรับสิทธิ์ ทั้งก่อนและหลังการดำเนินการแก้ไข

เขตข้อมูลตาราง

ในการจำกัดการเข้าถึงข้อมูล คุณสามารถใช้:
● ช่องตารางของออบเจ็กต์ที่มีการอธิบายข้อจำกัดการเข้าถึงข้อมูล
ตัวอย่างเช่น หากมีการกำหนดข้อจำกัดในการอ่านองค์ประกอบของไดเร็กทอรีคู่สัญญา ข้อจำกัดดังกล่าวจะสามารถใช้ฟิลด์ของไดเร็กทอรีคู่สัญญาและส่วนที่เป็นตารางได้ โดยเฉพาะอย่างยิ่ง ข้อจำกัดที่ง่ายที่สุดในการอ่านองค์ประกอบของไดเร็กทอรีคู่สัญญาอาจมีลักษณะดังนี้:

ชื่อสถานที่ = “โรงงานอิฐ”
หรือเช่นนี้:

ที่ไหน สินค้า.ชื่อ= “อิฐเป็นสีแดง”
โดยที่ Products เป็นส่วนหนึ่งของไดเรกทอรีผู้รับเหมา
● ฟิลด์ของตารางของออบเจ็กต์ที่สามารถเข้าถึงได้ผ่านลิงก์ในออบเจ็กต์ข้อจำกัดหลัก
ตัวอย่างเช่น หากแอ็ตทริบิวต์ Main Manager ของไดเร็กทอรี Contractors มีประเภทลิงก์ไปยังไดเร็กทอรี Users ดังนั้นข้อจำกัดในการเข้าถึงอาจมี เช่น แบบฟอร์มต่อไปนี้:

ที่ไหน MainManager.รหัส= “อีวานอฟ”
หรือ:

ที่ไหน ผู้จัดการหลัก.บุคคล.ชื่อ= “เปตรอฟสกี้”
● ฟิลด์ของตารางออบเจ็กต์ที่เกี่ยวข้องกับออบเจ็กต์หลักของข้อจำกัดตามเงื่อนไขและนิพจน์บางประการเหนือสิ่งเหล่านั้น
ตัวอย่างเช่น อาจมีการกำหนดข้อจำกัดต่อไปนี้ในการอ่านองค์ประกอบของไดเร็กทอรีคู่สัญญา:

คู่สัญญา
จาก
สารบบ.คู่สัญญาคู่ค้าอย่างไร
การเชื่อมต่อด้านซ้าย ไดเรกทอรีผู้ใช้ผู้ใช้ AS
ซอฟต์แวร์ = Users.Name
โดยที่ = “เปตรอฟสกี้”
ข้อจำกัดนี้ใช้ฟิลด์ขององค์ประกอบไดเร็กทอรีผู้ใช้ที่เกี่ยวข้องกับองค์ประกอบของไดเร็กทอรีคู่สัญญาตามค่าของฟิลด์ชื่อ

แบบสอบถามที่ซ้อนกัน

การสืบค้นแบบซ้อนจะใช้เพื่อสร้างชุดระเบียนที่สามารถใช้ได้:
● เพื่อเชื่อมโยงไปยังตารางของวัตถุข้อ จำกัด หลัก;
● เพื่อใช้เป็นตัวถูกดำเนินการสำหรับการดำเนินการเปรียบเทียบ B หรือ NOT B
การสืบค้นแบบซ้อนสามารถใช้คุณลักษณะภาษาการสืบค้นได้ ยกเว้น:
● ตัวดำเนินการในลำดับชั้น;
● ข้อเสนอผลลัพธ์;
● ผลลัพธ์ของการสืบค้นแบบซ้อนไม่ควรมีส่วนที่เป็นตาราง
● โดยเฉพาะตารางเสมือนบางตาราง ส่วนที่เหลือและการหมุนเวียน.
ในตัวอย่างต่อไปนี้ของข้อจำกัดในการอ่านจากไดเร็กทอรี Accounts แบบสอบถามย่อยจะถูกใช้เป็นชุดของระเบียนเพื่อเชื่อมโยงกับออบเจ็กต์หลักของข้อจำกัด:

คู่สัญญา
จาก
สารบบ.คู่สัญญาคู่ค้าอย่างไร
การเชื่อมต่อด้านซ้าย
(เลือก
Users.Name, Users.Individual
จาก
ไดเรกทอรีผู้ใช้ผู้ใช้ AS
ที่ไหน
Users.รหัส> “Petechkin”) ในฐานะผู้ใช้
โดย คู่สัญญา ชื่อผู้จัดการหลัก = Users.ชื่อ
ที่ไหน Users.Individual.Name= “เปตรอฟสกี้”
ตัวอย่างต่อไปนี้แสดงข้อจำกัดในการอ่านจากไดเร็กทอรี Passport Data of Individuals ซึ่งใช้เคียวรีแบบซ้อนอยู่
เป็นตัวถูกดำเนินการของการดำเนินการเปรียบเทียบ B:

ที่ไหน
ข้อมูลหนังสือเดินทางบุคคลบุคคลใน
(เลือกต่างๆ
คนงาน.บุคคลในฐานะบุคคล
จาก
ทะเบียนข้อมูลพนักงานในฐานะคนงาน)
หากจำเป็นต้องได้รับข้อมูลจากส่วนที่เป็นตารางในแบบสอบถามแบบซ้อน ในส่วน FROM ของแบบสอบถามแบบซ้อน คุณจะต้องเข้าถึงส่วนที่เป็นตารางโดยตรง ตัวอย่างเช่น แทนที่จะเป็น:

เลือกลิงค์เป็นลิงค์
สินค้า.ชื่อยังไง ชื่อสินค้า
จาก สารบบ.คู่สัญญา
เนื่องจากแบบสอบถามซ้อนอยู่ภายในข้อจำกัด คุณควรใช้:

ตัวเลือกเซสชัน

คำขอจำกัดการเข้าถึงข้อมูลอาจรวมถึงพารามิเตอร์เซสชันด้วย ตัวอย่างเช่น หากต้องการอ่านองค์ประกอบไดเร็กทอรี กลุ่มอีเมลคุณสามารถตั้งค่าข้อจำกัดการเข้าถึงต่อไปนี้ได้:

ที่ไหน Owner.AccountAccess.User = &ผู้ใช้ปัจจุบัน
และ Owner.AccountAccess.Administration= จริง

CurrentUser เป็นพารามิเตอร์เซสชัน

ตัวเลือกการทำงาน

คำขอจำกัดการเข้าถึงข้อมูลอาจมีตัวเลือกการทำงานด้วย สามารถใช้เฉพาะตัวเลือกการทำงานที่ไม่ขึ้นอยู่กับพารามิเตอร์เท่านั้น ตัวอย่างเช่น หากไดเร็กทอรี Items มีแอ็ตทริบิวต์ MainWarehouse ข้อจำกัดในการอ่านแอ็ตทริบิวต์นี้อาจมีลักษณะดังนี้:

โดยที่และการบัญชีคลังสินค้า = TRUE

โดยที่การบัญชีคลังสินค้าเป็นตัวเลือกที่ใช้งานได้

คุณสมบัติการใช้งาน

บางฟิลด์ของออบเจ็กต์ข้อมูลข้อจำกัดหลักอาจถูกนำมาใช้ในข้อจำกัดของออบเจ็กต์ฐานข้อมูลประเภทต่อไปนี้:
● ในการลงทะเบียนสะสม ข้อ จำกัด การเข้าถึงสามารถมีการวัดของวัตถุหลักของข้อ จำกัด เท่านั้น;
● ในทะเบียนการบัญชี เฉพาะการวัดงบดุลของวัตถุหลักของข้อจำกัดเท่านั้นที่สามารถนำมาใช้ในข้อจำกัดได้
บันทึก. หากภายใต้เงื่อนไขของการเข้าถึงข้อมูลการลงทะเบียนการสะสมการหมุนเวียนอย่าง จำกัด จะใช้การวัดที่ไม่รวมอยู่ในผลรวมแล้ว
เมื่อเข้าถึงตารางการปฏิวัติเสมือน ยอดรวมที่เก็บไว้จะไม่ถูกใช้ และคำขอจะดำเนินการทั้งหมดตามตารางการเคลื่อนไหว

การดำเนินการจำกัดการเข้าถึง

ข้อจำกัดการเข้าถึงจะถูกตรวจสอบทุกครั้งที่มีการดำเนินการที่เหมาะสมกับออบเจ็กต์ฐานข้อมูล (จากกล่องโต้ตอบ จากภาษาในตัว ผ่านการสืบค้น) และสามารถดำเนินการด้วยวิธีใดวิธีหนึ่งจากสองวิธี:
● ทุกอย่าง เมธอด "ทั้งหมด" หมายความว่าการดำเนินการบางอย่างกับข้อมูล (จากกล่องโต้ตอบ จากภาษาที่มีอยู่แล้ว หรือผ่านการสืบค้น) จะต้องดำเนินการกับออบเจ็กต์ฐานข้อมูลทั้งหมดโดยนัยจากการดำเนินการนี้ หากการดำเนินการดังกล่าวจำเป็นต้องอ่านหรือแก้ไขออบเจ็กต์ฐานข้อมูลที่ไม่เป็นไปตามข้อจำกัดการเข้าถึงที่เหมาะสม การดำเนินการจะสิ้นสุดลง
ผิดปกติเนื่องจากการละเมิดการเข้าถึง
● ได้รับอนุญาต วิธีการ "อนุญาต" หมายความว่าเมื่อดำเนินการกับข้อมูล ควรอ่านเฉพาะออบเจ็กต์ฐานข้อมูลที่ตรงตามข้อจำกัดการเข้าถึงที่เหมาะสมเท่านั้น ออบเจ็กต์ฐานข้อมูลที่ไม่เป็นไปตามข้อจำกัดการเข้าถึงจะถือว่าหายไปเมื่อดำเนินการดังกล่าว และไม่ส่งผลกระทบต่อผลลัพธ์ของการดำเนินการ
ข้อจำกัดในการเข้าถึงข้อมูลถูกกำหนดให้กับออบเจ็กต์ฐานข้อมูล ณ เวลาที่ 1C:Enterprise เข้าถึงฐานข้อมูล ใน 1C:Enterprise เวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ จะมีการใช้ข้อจำกัดบนเซิร์ฟเวอร์ 1C:Enterprise
วิธีการดำเนินการของข้อ จำกัด ที่เลือกเพื่อดำเนินการแต่ละการดำเนินการกับข้อมูลนั้นถูกกำหนดโดยวัตถุประสงค์ของการดำเนินการนี้และระดับความรับผิดชอบของผลลัพธ์ โดยเฉพาะอย่างยิ่งเมธอด "อนุญาต" ถูกใช้เมื่อแสดงรายการไดนามิกและการดำเนินการเชิงโต้ตอบอื่นๆ เมธอด “ทั้งหมด” ถูกใช้เมื่อดำเนินการใดๆ กับออบเจ็กต์แอปพลิเคชันจากภาษา 1C:Enterprise ในตัว รวมถึงการเปลี่ยนแปลงใดๆ กับออบเจ็กต์ฐานข้อมูล ดังนั้น ตัวอย่างเช่น ปัญหาอาจเกิดขึ้นเมื่อสร้างการเลือกสำหรับเมธอด Select() ของผู้จัดการไดเร็กทอรี เอกสาร และอื่นๆ ที่มีการเลี่ยงผลลัพธ์ในภายหลัง หากมีการตั้งค่าข้อจำกัดที่ค่อนข้างซับซ้อนบนออบเจ็กต์ที่เกี่ยวข้อง เนื่องจากไม่ใช่ทุกเงื่อนไขใน การจำกัดสิทธิ์การเข้าถึงสามารถแสดงได้อย่างเพียงพอเป็นตัวเลือกสำหรับเมธอด Select()
ในการสอบถาม คุณสามารถควบคุมวิธีการทำงานของข้อจำกัดการเข้าถึงข้อมูลได้ เพื่อจุดประสงค์นี้ ภาษาของคิวรีจะจัดเตรียมคีย์เวิร์ด อนุญาต- หากคำขอไม่ได้ระบุว่าอนุญาต ข้อจำกัดก็จะมีผลใช้ในลักษณะ "ทั้งหมด" หากมีการระบุคำว่า ALLOWED แสดงว่าวิธี "อนุญาต" จะถูกเลือก
สิ่งสำคัญคือหากแบบสอบถามไม่ได้ระบุคีย์เวิร์ด ALLOWED การเลือกทั้งหมดที่ระบุในแบบสอบถามนั้นจะต้องไม่ขัดแย้งกับข้อจำกัดการอ่านใดๆ บนออบเจ็กต์ฐานข้อมูลที่ใช้ในแบบสอบถาม นอกจากนี้ หากแบบสอบถามใช้ตารางเสมือน จะต้องนำการเลือกที่เกี่ยวข้องไปใช้กับตารางเสมือนด้วย
ตัวอย่าง:

เลือก
ติดต่อข้อมูลส่วนแรก.บทนำ
จาก RegisterInformation.ContactInformation.SliceLast(, Type = &ประเภท)
ยังไง ติดต่อข้อมูล SliceFirst
ที่ไหน
ContactInformationSliceFirst.Type = &ประเภท
เมื่อใช้เทคโนโลยีออบเจ็กต์ ไม่รองรับการเข้าถึงข้อมูลในโหมดอนุญาต สันนิษฐานว่าเทคโนโลยีออบเจ็กต์ถูกใช้สำหรับการดำเนินการที่สำคัญที่สุดกับข้อมูล รวมถึงการเปลี่ยนแปลงข้อมูลด้วย หากต้องการรับข้อมูลทั้งหมดโดยใช้เทคโนโลยีออบเจ็กต์ โดยไม่คำนึงถึงข้อจำกัดที่ตั้งไว้ คุณสามารถดำเนินการที่จำเป็นในโมดูลที่ได้รับสิทธิพิเศษหรือในนามของผู้ใช้ที่มีสิทธิ์เต็มที่ ไม่มีวิธีการรับเฉพาะข้อมูลที่ได้รับอนุญาตในเทคโนโลยีออบเจ็กต์เท่านั้น

กลไกในการกำหนดข้อจำกัด

การดำเนินการใด ๆ กับข้อมูลที่จัดเก็บไว้ในฐานข้อมูลใน 1C:Enterprise จะนำไปสู่การเข้าถึงฐานข้อมูลในที่สุด
ขออ่านหรือเปลี่ยนแปลงข้อมูล ในกระบวนการดำเนินการสืบค้นไปยังฐานข้อมูล กลไกภายในของ 1C:Enterprise จะกำหนดข้อจำกัดการเข้าถึง ในกรณีนี้:
● รายการสิทธิ์ถูกสร้างขึ้น (อ่าน เพิ่ม เปลี่ยนแปลง ลบ) รายการตารางฐานข้อมูล และรายการฟิลด์ที่ใช้โดยคำขอนี้
● จากบทบาททั้งหมดของผู้ใช้ปัจจุบัน ข้อจำกัดในการเข้าถึงข้อมูลจะถูกเลือกสำหรับสิทธิ์ ตาราง และฟิลด์ทั้งหมดที่เกี่ยวข้องกับคำขอ ยิ่งไปกว่านั้น หากบทบาทไม่มีข้อจำกัดในการเข้าถึงข้อมูลของตารางหรือเขตข้อมูล นั่นหมายความว่าค่าของเขตข้อมูลที่ต้องการจากบันทึกใดๆ จะมีอยู่ในตารางนี้ กล่าวอีกนัยหนึ่ง การไม่มีข้อจำกัดในการเข้าถึงข้อมูลหมายถึงการมีอยู่ของข้อจำกัด
ความจริงอยู่ที่ไหน
● ดึงค่าปัจจุบันของพารามิเตอร์เซสชันทั้งหมดและตัวเลือกการทำงานที่เกี่ยวข้องกับข้อจำกัดที่เลือก
หากต้องการรับค่าของพารามิเตอร์เซสชัน ผู้ใช้ปัจจุบันไม่จำเป็นต้องมีสิทธิ์เพื่อรับค่านั้น อย่างไรก็ตาม หากไม่ได้ตั้งค่าของพารามิเตอร์เซสชันบางอย่าง จะเกิดข้อผิดพลาดและการสืบค้นฐานข้อมูลจะไม่ถูกดำเนินการ
การรับตัวเลือกการทำงานจะได้รับอิทธิพลจากโหมดสิทธิพิเศษตามคุณสมบัติการรับของตัวเลือกการทำงาน
หากล้างคุณสมบัตินี้แล้ว ผู้ใช้ปัจจุบันจะต้องมีสิทธิ์ในการอ่านออบเจ็กต์ที่เก็บตัวเลือกฟังก์ชันไว้
● ข้อจำกัดที่ได้รับจากบทบาทเดียวจะรวมกันโดยใช้การดำเนินการ AND
● ข้อจำกัดที่ได้รับจากบทบาทที่แตกต่างกันจะรวมกันโดยใช้การดำเนินการ OR
● เงื่อนไขที่สร้างขึ้นจะถูกเพิ่มในการสืบค้น SQL ซึ่ง 1C:Enterprise เข้าถึง DBMS เมื่อเข้าถึงข้อมูลจากเงื่อนไขการจำกัดการเข้าถึง จะไม่ดำเนินการตรวจสอบสิทธิ์ (ทั้งสำหรับออบเจ็กต์เมตาดาต้าหรือออบเจ็กต์ฐานข้อมูล) นอกจากนี้ กลไกในการเพิ่มเงื่อนไขขึ้นอยู่กับวิธีดำเนินการที่เลือกของข้อจำกัด "ทั้งหมด" หรือ "อนุญาต"
วิธี "ทุกอย่าง"
เมื่อกำหนดข้อจำกัดโดยใช้เมธอด "ทั้งหมด" เงื่อนไขและฟิลด์จะถูกเพิ่มในการสืบค้น SQL เพื่อให้ 1C:Enterprise สามารถรับข้อมูลเกี่ยวกับว่าในระหว่างดำเนินการสืบค้นฐานข้อมูล ข้อมูลที่ถูกห้ามสำหรับผู้ใช้ที่กำหนดนั้นถูกใช้หรือไม่ หากมีการใช้ข้อมูลที่ต้องห้าม คำขอจะล้มเหลว การกำหนดข้อจำกัดการเข้าถึงโดยใช้วิธี "ทั้งหมด" จะแสดงไว้ในแผนภาพ รูปที่ 1 1:

ข้าว. 1. วิธี “ทุกอย่าง”

วิธีการ "อนุญาต"
เมื่อใช้ข้อจำกัดโดยใช้วิธี "อนุญาต" เงื่อนไขจะถูกเพิ่มลงในแบบสอบถาม SQL เพื่อให้บันทึกที่ไม่ได้รับอนุญาตสำหรับผู้ใช้ปัจจุบันไม่ส่งผลกระทบต่อผลลัพธ์ของแบบสอบถาม กล่าวอีกนัยหนึ่ง เมื่อมีการกำหนดข้อจำกัดในโหมด "อนุญาต" บันทึกที่ห้ามสำหรับผู้ใช้รายใดรายหนึ่งจะถือว่าขาดหายไป ซึ่งแสดงไว้ในแผนผังในรูปที่ 3

ออบเจ็กต์อื่นๆ ที่เกี่ยวข้องกับข้อจำกัดการเข้าถึงข้อมูล

เมื่อออกแบบการกำหนดค่าที่ใช้ข้อจำกัดในการเข้าถึงข้อมูล ออบเจ็กต์ข้อมูลเมตา เช่น พารามิเตอร์เซสชัน ตัวเลือกการทำงาน และโมดูลที่ใช้ร่วมกันพร้อมแฟล็กสิทธิพิเศษอาจมีประโยชน์
ตัวเลือกเซสชัน
สามารถใช้พารามิเตอร์เซสชันในการจำกัดการเข้าถึงข้อมูลในลักษณะเดียวกับที่พารามิเตอร์คำขอสามารถใช้ในคำขอได้
ตัวเลือกการทำงาน
ตัวเลือกการทำงานที่ไม่ขึ้นกับพารามิเตอร์สามารถนำมาใช้ในข้อจำกัดการเข้าถึงข้อมูลได้ในลักษณะเดียวกับที่พารามิเตอร์การสืบค้นสามารถนำมาใช้ในการสืบค้นได้
โมดูลทั่วไปที่ได้รับสิทธิพิเศษ

หากเลือกแฟล็ก Privileged สำหรับโมดูลทั่วไป การดำเนินการตามขั้นตอนและฟังก์ชันของโมดูลนี้จะได้รับข้อมูลเฉพาะที่สำคัญ:
● ใน 1C:Enterprise เวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ เฉพาะโมดูลที่ดำเนินการบนเซิร์ฟเวอร์เท่านั้นที่สามารถรับสิทธิ์ได้
● การดำเนินการตามขั้นตอนและฟังก์ชันของโมดูลสิทธิพิเศษและทุกสิ่งที่ถูกเรียกจากโมดูลเหล่านั้นจะดำเนินการเมื่อระบบจำกัดถูกปิด
สิทธิ์ในทั้งวัตถุข้อมูลเมตาและข้อมูล ดังนั้น จากโมดูลที่ได้รับสิทธิพิเศษ การดำเนินการใดๆ ก็สามารถดำเนินการได้
ออบเจ็กต์ใด ๆ แม้ว่าผู้ใช้ปัจจุบันจะไม่มีสิทธิ์ที่เหมาะสมก็ตาม
โมดูลสิทธิพิเศษได้รับการออกแบบเพื่อตั้งค่าเริ่มต้นของพารามิเตอร์เซสชันที่ใช้ในการจำกัดการเข้าถึงข้อมูล
โมดูลทั่วไปเพิ่มเติมสามารถนำมาใช้สำหรับการดำเนินการแบบองค์รวมกับข้อมูลโดยผู้ใช้ที่มีสิทธิ์จำกัด
ตัวอย่างเช่น หากฟังก์ชันของผู้ใช้รวมถึงการป้อนและการผ่านรายการเอกสาร แต่ผู้ใช้ไม่ควรมีสิทธิ์เข้าถึงข้อมูลที่ได้รับผลกระทบจากการผ่านรายการเอกสาร ดังนั้นการดำเนินการของการดำเนินการผ่านรายการสามารถย้ายไปยังโมดูลที่มีสิทธิ์ได้ สิ่งนี้จะอนุญาตให้ผู้ใช้สามารถโพสต์เอกสารโดยไม่ต้องให้สิทธิ์แก่เขาในข้อมูลอื่น ๆ (เช่น ผู้ลงทะเบียน)
โหมดสิทธิพิเศษ
เป็นไปได้ที่จะติดตั้งโหมดสิทธิพิเศษโดยทางโปรแกรมเมื่อทำงานกับข้อมูล การตั้งค่าโหมดสิทธิพิเศษโดยทางโปรแกรม
อาจจำเป็นในกรณีที่ต้องดำเนินการกับข้อมูลฐานข้อมูลจำนวนมาก และไม่มีประโยชน์ในการตรวจสอบสิทธิ์การเข้าถึงข้อมูล
สำหรับคำอธิบายของโหมดพิเศษ โปรดดูที่นี่

การใช้พรีโปรเซสเซอร์

เมื่อแก้ไขข้อความจำกัดการเข้าถึงข้อมูล คุณสามารถใช้คำแนะนำของตัวประมวลผลล่วงหน้าได้ มีคำแนะนำต่อไปนี้:

#ถ้า<Выражение>#แล้ว
#เอลเซฟ<Выражение>#แล้ว
#มิฉะนั้น
#ENDSIF
<Выражение>– การแสดงออกเชิงตรรกะตามอำเภอใจในภาษาบิวท์อิน ผลลัพธ์จะเป็นประเภทบูลีน นิพจน์อาจมี:
● การดำเนินการเปรียบเทียบ<, >, <=, >= , =, <> ;
● การดำเนินการเชิงตรรกะและ, หรือ, ไม่ใช่;
● พารามิเตอร์เซสชัน – ใช้ไวยากรณ์ &พารามิเตอร์ โดยที่ พารามิเตอร์ คือชื่อของพารามิเตอร์เซสชัน
หากผลลัพธ์ของคำสั่ง #IF หรือ #ELSEIF เป็น True ข้อความผลลัพธ์ของคำสั่งจำกัดการเข้าถึงจะมีข้อความที่ตามหลังคีย์เวิร์ด #THEN หากผลลัพธ์ของนิพจน์เป็นเท็จ ข้อความที่อยู่หลังคีย์เวิร์ด #THEN จะไม่ถูกวางในข้อความของคำสั่งจำกัดการเข้าถึง ข้อความที่ตามหลังคำสั่ง #ELSE จะถูกวางไว้ในข้อความจำกัดการเข้าถึงที่เป็นผลลัพธ์ หากไม่มีเงื่อนไขใดตรงตามเงื่อนไขก่อนหน้านี้
บันทึก- หากข้อความของการจำกัดการเข้าถึงข้อมูลมีคำสั่งของตัวประมวลผลล่วงหน้า ข้อจำกัดดังกล่าวจะไม่ผ่านการตรวจสอบไวยากรณ์เมื่อทำการแก้ไข และไม่สามารถเปลี่ยนแปลงได้โดยใช้ตัวสร้าง
ตัวอย่าง:

#IF &ผู้ใช้ปัจจุบัน<>“คลิโมวา” #แล้ว
<текст ограничения доступа>
#ENDSIF
ที่นี่ ผู้ใช้ปัจจุบัน– พารามิเตอร์ประเภทเซสชั่น DirectoryLink.Users
การออกแบบนี้หมายความว่าเงื่อนไขในการตั้งค่าการจำกัดการเข้าถึงจะถูกตรวจสอบสำหรับผู้ใช้ทั้งหมดจากไดเร็กทอรี ยกเว้นผู้ใช้ Klimova

เทมเพลตข้อความจำกัดการเข้าถึง

บทบาทสามารถประกอบด้วยรายการเทมเพลตการจำกัดการเข้าถึง ซึ่งอธิบายไว้ในแท็บเทมเพลตการจำกัดของแบบฟอร์มบทบาท คุณยังสามารถแก้ไขเทมเพลตการจำกัดการเข้าถึงในตัวแก้ไขเพื่อแก้ไขกลุ่มการจำกัดการเข้าถึงและเทมเพลต
เทมเพลตการจำกัดการเข้าถึงแต่ละเทมเพลตมีชื่อและข้อความ ชื่อเทมเพลตเป็นไปตามกฎปกติสำหรับชื่อที่ใช้ในระบบ 1C:Enterprise
ข้อความเทมเพลตประกอบด้วยข้อความบางส่วนในภาษาที่จำกัดการเข้าถึงข้อมูล และอาจมีพารามิเตอร์ที่ไฮไลต์โดยใช้สัญลักษณ์
“#”.
หลังสัญลักษณ์ “#” อาจทำตาม:
● หนึ่งในคำหลัก:
● พารามิเตอร์ หลังจากนั้นจะระบุหมายเลขของพารามิเตอร์ในเทมเพลตในวงเล็บ
● CurrentTable – ระบุการแทรกลงในข้อความของชื่อเต็มของตารางที่กำลังสร้างข้อจำกัด
ชื่อตารางปัจจุบัน– หมายถึงการแทรกลงในข้อความของชื่อเต็มของตาราง (เป็นค่าสตริงในเครื่องหมายคำพูด) ที่ใช้คำสั่งในภาษาบิวท์อินเวอร์ชันปัจจุบัน
●ชื่อของ CurrentAccessRight – ประกอบด้วยชื่อของสิทธิ์ที่ใช้ข้อจำกัดปัจจุบัน: อ่าน/เพิ่ม/แทรก/เปลี่ยนแปลง/
อัปเดต ลบ;
● ชื่อพารามิเตอร์เทมเพลต – หมายถึงการแทรกข้อจำกัดพารามิเตอร์เทมเพลตที่สอดคล้องกันลงในข้อความ
● สัญลักษณ์ “#” – ระบุการแทรกสัญลักษณ์ “#” หนึ่งสัญลักษณ์ลงในข้อความ

นิพจน์การจำกัดการเข้าถึงอาจประกอบด้วย:

● เทมเพลตการจำกัดการเข้าถึงซึ่งระบุไว้ในรูปแบบ
#TemplateName("ค่าของพารามิเตอร์เทมเพลต 1", "ค่าของพารามิเตอร์เทมเพลต 2", ...) พารามิเตอร์เทมเพลตแต่ละรายการจะอยู่ในเครื่องหมายคำพูดคู่ หากคุณต้องการระบุอักขระเครื่องหมายคำพูดคู่ในข้อความพารามิเตอร์ คุณต้องใช้เครื่องหมายคำพูดคู่สองตัว
● ฟังก์ชั่น หน้าประกอบด้วย (ที่ที่เรากำลังมองหา, สิ่งที่เรากำลังมองหา)- ฟังก์ชันนี้ได้รับการออกแบบมาเพื่อค้นหาการเกิดขึ้นของสตริง WhatWeLook ในสตริง WhereWeLook คืนค่า True หากพบเหตุการณ์นี้ และคืนค่าเป็น False มิฉะนั้น

● ตัวดำเนินการ + สำหรับการต่อสตริง
เพื่อให้ง่ายต่อการแก้ไขข้อความเทมเพลต บนแท็บเทมเพลตข้อจำกัดในแบบฟอร์มบทบาท ให้คลิกปุ่มตั้งค่าข้อความเทมเพลต ในกล่องโต้ตอบที่เปิดขึ้น ให้ป้อนข้อความเทมเพลตแล้วคลิกตกลง
ระบบ 1C:Enterprise ตรวจสอบไวยากรณ์ของข้อความเทมเพลต ตรวจสอบไวยากรณ์ของการใช้เทมเพลต และแทนที่แมโครข้อความของเทมเพลตการจำกัดการเข้าถึงบทบาทลงในข้อความคำขอ
การทดแทนเทมเพลตมาโครคือ:
● แทนที่การเกิดขึ้นของพารามิเตอร์ในข้อความของเทมเพลตด้วยค่าพารามิเตอร์จากนิพจน์สำหรับการใช้เทมเพลตในข้อความของข้อ จำกัด
● แทนที่นิพจน์การใช้เทมเพลตในข้อความคำขอด้วยข้อความเทมเพลตที่เป็นผลลัพธ์
เมื่อคุณเรียกตัวสร้างแบบสอบถามสำหรับเงื่อนไขที่มีเทมเพลตการจำกัดการเข้าถึง จะมีการออกคำเตือนว่าเทมเพลตทั้งหมดจะถูกแทนที่
ต่อไปนี้เป็นตัวอย่างของเทมเพลตข้อจำกัด:

ขอแนะนำเพื่อจัดการการเข้าถึงข้อมูลของผู้ใช้ตามฟังก์ชันต่างๆ เมื่อตั้งค่าข้อจำกัดการเข้าถึงข้อมูล
ปฏิบัติตามหลักการดังต่อไปนี้:
● จำเป็นต้องเลือกชุดข้อมูล (อาจขึ้นอยู่กับผู้ใช้ปัจจุบัน) ซึ่งการเตรียมการเบื้องต้นมีความเหมาะสม ข้อมูลที่เลือกควรทำให้ข้อ จำกัด ในการเข้าถึงข้อมูลง่ายขึ้นมากที่สุดเท่าที่จะเป็นไปได้และในทางกลับกันไม่ควรมีขนาดใหญ่เกินไป แจกจ่ายตามพารามิเตอร์เซสชัน
● ตั้งค่าของพารามิเตอร์เซสชันในตัวจัดการ SetSessionParameters() ของโมดูลเซสชัน
● กำหนดข้อจำกัดการเข้าถึงข้อมูลที่สมเหตุสมผล (ข้อมูลเป็นความลับหรือสำคัญที่สุดสำหรับการรักษาความสมบูรณ์ของระบบ) โปรดทราบว่าการตั้งค่าข้อจำกัดการเข้าถึงอาจทำให้การเข้าถึงข้อมูลนี้ช้าลง ข้อจำกัดที่ซับซ้อนมากเกินไปอาจนำไปสู่การชะลอตัวได้เช่นกัน
● หากจำเป็นเพื่อให้แน่ใจว่าผู้ใช้ดำเนินการกับข้อมูลในจำนวนที่จำกัด ซึ่งไม่สามารถให้สิทธิ์เข้าถึงข้อมูลนี้ได้อย่างเต็มที่ ให้ย้ายการดำเนินการเหล่านี้ไปยังโมดูลที่ได้รับสิทธิพิเศษ หรือเปิดใช้งานและปิดใช้งานโหมดที่ได้รับสิทธิ์อย่างชัดเจนใน ตำแหน่งที่เหมาะสมในโค้ดโปรแกรม
● การเข้าถึงข้อมูลสำหรับการตรวจสอบต่างๆ ที่ดำเนินการโดยระบบเมื่อเขียนออบเจ็กต์จะดำเนินการในโหมดสิทธิพิเศษ

ซึ่งจะทำให้คุณไม่สามารถปิดใช้งานข้อจำกัดสิทธิ์ระดับบันทึกสำหรับฟิลด์ที่เกี่ยวข้องได้ หากการกำหนดค่าทำงานกับข้อมูลนี้
วางแผนในโหมดควบคุมเท่านั้น:

● สำหรับไดเร็กทอรีเมื่อตรวจสอบพาเรนต์ เจ้าของ และความเป็นเอกลักษณ์ของโค้ด
● สำหรับเอกสาร กระบวนการทางธุรกิจ และงานเมื่อตรวจสอบความเป็นเอกลักษณ์ของตัวเลข
● ปิดการใช้งานสำหรับแผนการแลกเปลี่ยนเมื่อตรวจสอบเอกลักษณ์ของรหัส
● สำหรับแผนภูมิบัญชีและแผนภูมิประเภทลักษณะเฉพาะเมื่อตรวจสอบหลักและความเป็นเอกลักษณ์ของรหัส

เมื่อสร้างแบบสอบถามที่มีข้อจำกัดด้านข้อมูล มีข้อจำกัดและข้อควรพิจารณาบางประการที่ควรคำนึงถึง:

● หากมีการระบุข้อจำกัดการเข้าถึงข้อมูลสำหรับตารางออบเจ็กต์และมีการใช้การรวมกับตารางดังกล่าวในการสืบค้นข้อมูล ดังนั้นในเงื่อนไขการเชื่อมต่อ (ส่วนคำขอซอฟต์แวร์) การใช้ส่วนตารางของออบเจ็กต์ที่มีการจำกัดการเข้าถึงที่ระบุคือ ไม่ได้รับอนุญาต
● ถ้าแบบสอบถามระบุตารางที่ไม่มีการใช้ฟิลด์ใด ๆ ในการสืบค้น ตารางนี้จะมีการกำหนดข้อจำกัดการเข้าถึงข้อมูลทั้งหมด เช่น ขอ เลือกปริมาณ (*) จากไดเร็กทอรี คู่สัญญาจะถูกดำเนินการโดยคำนึงถึงข้อจำกัดการเข้าถึงทั้งหมดที่ระบุไว้สำหรับไดเร็กทอรีทดสอบ ข้อจำกัดถูกกำหนดโดย "โดย OR" ซึ่งหมายความว่าบันทึกทั้งหมดที่มีอยู่ภายใต้เงื่อนไขอย่างน้อยหนึ่งเงื่อนไขจะพร้อมใช้งาน หากบางฟิลด์ไม่ได้ระบุเงื่อนไข แบบสอบถามจะถูกดำเนินการกับบันทึกทั้งหมดในตาราง
หากแบบสอบถามใช้ตารางระดับบนสุด จะไม่มีการกำหนดข้อจำกัดที่ระบุไว้สำหรับคอลัมน์ของตารางที่ซ้อนกัน
หากแบบสอบถามใช้ตารางที่ซ้อนกัน ข้อจำกัดจะมีผลกับทั้งตารางที่ซ้อนกันและตารางระดับบนสุด
เช่น ขอ เลือกปริมาณ(*) จากไดเรกทอรี คู่สัญญา ข้อตกลงจะถูกดำเนินการโดยคำนึงถึงข้อจำกัดทั้งหมดสำหรับไดเรกทอรีคู่สัญญา ตลอดจนคำนึงถึงข้อจำกัดที่เกี่ยวข้องกับส่วนที่เป็นตารางของข้อตกลง

● หากการเข้าถึงฟิลด์ที่จำเป็นเพื่อให้ได้ตัวแทนของออบเจ็กต์ข้อมูลเมตาอ้างอิงถูกปฏิเสธโดยข้อจำกัดในการเข้าถึง
ข้อมูลหรือการเข้าถึงออบเจ็กต์ถูกปฏิเสธในระดับสิทธิ์การเข้าถึง ดังนั้นการได้รับเป็นตัวแทนของออบเจ็กต์ดังกล่าวจะไม่ส่งผลกระทบต่อความคืบหน้าของธุรกรรมปัจจุบัน

ตัวสร้างข้อจำกัดการเข้าถึงข้อมูล

หากต้องการเรียกตัวสร้างในช่องตาราง Data Access Restrictions ในคอลัมน์ Access Restrictions คุณต้องไปที่โหมดแก้ไขและ
คลิกปุ่มเลือก และในแบบฟอร์มที่เปิดขึ้น ให้คลิกปุ่มตัวสร้างแบบสอบถาม...
แบบฟอร์มคอนสตรัคเตอร์จะแสดงบนหน้าจอ:


ข้าว. 3. แท็บ “ตารางและฟิลด์” ของตัวออกแบบข้อจำกัด

ด้วยความช่วยเหลือของมัน เงื่อนไขถูกสร้างขึ้นเพื่อกำหนดข้อจำกัดในการเข้าถึงข้อมูล
บนแท็บ ตารางและเขตข้อมูล ให้เลือกออบเจ็กต์ที่ต้องการในรายการฐานข้อมูล และย้ายไปยังรายการตาราง หากมีการระบุหลายตาราง แท็บลิงก์จะถูกเพิ่มลงในฟอร์มตัวออกแบบ


ข้าว. 4. แท็บ “ลิงก์” ของตัวออกแบบข้อจำกัด

บนแท็บลิงก์ เงื่อนไขจะถูกสร้างขึ้นซึ่งกำหนดให้กับลิงก์ระหว่างเขตข้อมูลตาราง หากต้องการป้อนเงื่อนไขใหม่ ให้คลิกปุ่มเพิ่ม และเลือกตารางใดตารางหนึ่งในคอลัมน์ Table1 ในคอลัมน์ Table2 ให้เลือกตารางที่มีเขตข้อมูลเกี่ยวข้องกับเขตข้อมูลของตารางแรก ด้านล่างรายการเงื่อนไขจะมีตัวควบคุมที่สามารถใช้เพื่อสร้างเงื่อนไขสำหรับการลิงก์ตารางได้
หากเลือกประเภทเงื่อนไขแบบง่าย ดังนั้นใน Field1 และ Field2 ฟิลด์ที่เกี่ยวข้องของตารางที่ระบุจะถูกเลือกและเงื่อนไขการเปรียบเทียบจะถูกตั้งค่า หากเลือกช่องที่ไม่ได้เปรียบเทียบ จากนั้นในบรรทัดรายการเงื่อนไขในคอลัมน์เงื่อนไขลิงก์ข้อความต่อไปนี้จะปรากฏขึ้น: กรอกเงื่อนไขไม่ถูกต้อง
บนแท็บเงื่อนไข หากจำเป็น คุณจะต้องระบุเงื่อนไขที่จะเลือกข้อมูลต้นฉบับ


ข้าว. 5. แท็บ “เงื่อนไข” ของตัวออกแบบข้อจำกัด

สำหรับแต่ละฟิลด์ที่เลือก คุณต้องเลือกประเภทของเงื่อนไขและระบุชื่อของพารามิเตอร์ พารามิเตอร์เซสชันสามารถใช้เป็นพารามิเตอร์ได้ อนุญาตให้มีหลายเงื่อนไข ในกรณีนี้ ในคอลัมน์เงื่อนไขของช่องตารางเงื่อนไข ข้อความเงื่อนไขจะแสดงเป็นหลายบรรทัด
ในระหว่างการสร้างคำขอ คุณสามารถดูข้อความคำขอได้โดยคลิกปุ่มคำขอ

การแก้ไขข้อจำกัดและเทมเพลตการอนุญาตเป็นชุด

โหมดสำหรับการแก้ไขการจำกัดสิทธิ์การเข้าถึงและเทมเพลตแบบกลุ่มถูกเรียกโดยคำสั่งการจำกัดการเข้าถึงทั้งหมดของเมนูบริบทของสาขาบทบาท แบบฟอร์มที่เปิดขึ้นประกอบด้วยสองแท็บ: ข้อจำกัดการเข้าถึง และเทมเพลตข้อจำกัด


ข้าว. 6 ข้อจำกัดและเทมเพลตการอนุญาตทั้งหมด

บนบุ๊กมาร์ก ข้อ จำกัด การเข้าถึงคุณสามารถดูข้อจำกัดการเข้าถึงที่ป้อนทั้งหมดได้ในรายการทั่วไป (สำหรับบทบาท ออบเจ็กต์ สิทธิ์ ชุดค่าผสมของฟิลด์ทั้งหมด)
คุณสามารถเพิ่มข้อจำกัดการเข้าถึงสำหรับบทบาท วัตถุ สิทธิ์ และการรวมกันของบทบาทต่างๆ ได้ในคราวเดียว
คุณสามารถกรองรายการตามเกณฑ์ต่างๆ


ข้าว. 7. การเลือกข้อจำกัดในการเข้าถึง

โหมดการแก้ไขกลุ่มช่วยให้คุณสามารถลบข้อจำกัดที่เลือกไว้ในรายการได้
คุณสามารถแก้ไขข้อจำกัดที่เลือกได้ ในกรณีนี้ คุณสามารถเปลี่ยนองค์ประกอบของฟิลด์และ/หรือข้อจำกัดในการเข้าถึงได้
โหมดการแก้ไขจำนวนมากยังช่วยให้คุณคัดลอกข้อจำกัดที่เลือกไปยังบทบาทอื่นๆ ได้

บนบุ๊กมาร์ก เทมเพลตข้อจำกัดคุณสามารถดูเทมเพลตการจำกัดการเข้าถึงทั้งหมดที่มีอยู่ในโซลูชันแอปพลิเคชัน ในขณะที่จากข้อความเทมเพลตนั้น จะแสดงเพียง 10 บรรทัดแรกในตาราง ซึ่งลงท้ายด้วยสัญลักษณ์ “…” หากข้อความเทมเพลตมีมากกว่า 10 บรรทัด หน้าต่างแก้ไขเทมเพลตจะแสดงข้อความแบบเต็มของเทมเพลต


รูปที่ 8 เทมเพลตการจำกัดการเข้าถึงทั้งหมด

คุณสามารถเพิ่มเทมเพลตการจำกัดการเข้าถึงสำหรับหลายบทบาทพร้อมกันได้

การตั้งค่าการเข้าถึงในระดับรายการไดเร็กทอรี

การตั้งค่านี้รวมอยู่ในการกำหนดค่าเมื่อไม่นานมานี้ โดยส่วนตัวแล้วฉันคิดว่าการตั้งค่านี้มีประโยชน์มาก

การตั้งค่านี้จำเป็นสำหรับผู้ที่ต้องการจำกัดการเข้าถึงไดเร็กทอรีตามองค์ประกอบของไดเร็กทอรีนี้ ตัวอย่างเช่น ผู้จัดการจำเป็นต้องดูเฉพาะลูกค้า เช่นเดียวกับรายงานและบันทึกเอกสาร สำหรับคู่ค้าที่เขาได้รับอนุญาตให้เข้าถึงเท่านั้น และนักบัญชีจำเป็นต้องมีสิทธิ์เข้าถึงองค์ประกอบทั้งหมดของไดเร็กทอรีโดยสมบูรณ์ เช่น “คู่ค้า ”

ฉันเสนอให้พิจารณาตัวอย่างโดยใช้ตัวอย่างของการกำหนดค่าชุดซอฟต์สตาร์ท

  1. ในขั้นตอนนี้ จำเป็นต้องกำหนดกลุ่มผู้ใช้

ผู้ดูแลระบบ;

ผู้จัดการฝ่ายขาย

ผู้จัดการฝ่ายจัดซื้อ

  1. ในขั้นตอนที่สอง จะมีการกำหนดกลุ่มการเข้าถึงไดเร็กทอรี

ผู้ซื้อ;

ซัพพลายเออร์;

โดยปกติแล้ว รายชื่อกลุ่มที่อธิบายไว้ข้างต้นจะถูกหารือกับฝ่ายบริหาร จากนั้นจึงเข้าสู่โปรแกรมเท่านั้น

ตอนนี้จำเป็นต้องอธิบายการตั้งค่าจริงที่ต้องดำเนินการใน 1C

  1. มาเปิดใช้งาน "การเข้าถึงแบบจำกัดในระดับบันทึก" บริการ - การจัดการผู้ใช้และการเข้าถึง - พารามิเตอร์การเข้าถึงในระดับบันทึก ดูภาพประกอบ 1.

แบบฟอร์มการประมวลผล “พารามิเตอร์การเข้าถึงในระดับบันทึก” จะเปิดขึ้นมา ดูรูปที่ 2.

ในแบบฟอร์มนี้ คุณต้องเปิดใช้งานข้อจำกัดจริงๆ ซึ่งรับผิดชอบแฟล็ก "จำกัดการเข้าถึงในระดับบันทึกตามประเภทของออบเจ็กต์" และเลือกไดเร็กทอรีที่จะใช้ข้อจำกัดดังกล่าว บทความนี้กล่าวถึงเฉพาะไดเร็กทอรี "คู่สัญญา" เท่านั้น

  1. ต่อไปเราจะต้องมีกลุ่มผู้ใช้และคู่สัญญาที่กำหนดไว้ในตอนต้นของบทความ

กลุ่มผู้รับเหมาจะถูกป้อนลงในไดเร็กทอรี "กลุ่มผู้ใช้" ดูภาพประกอบ 3.

รูปแบบขององค์ประกอบไดเร็กทอรี "กลุ่มผู้ใช้" จะเปิดขึ้น ดูรูปที่ 4.

ที่ด้านซ้ายของหน้าต่างจะมีการระบุวัตถุการเข้าถึง (สำหรับเรานี่คือ "คู่ค้า") ทางด้านขวาคือผู้ใช้ที่เป็นสมาชิกของกลุ่มในตัวอย่างนี้คือ "ผู้ดูแลระบบ"

สำหรับแต่ละกลุ่มผู้ใช้ที่คุณกำหนด คุณต้องดำเนินการตั้งค่านี้ให้เสร็จสิ้น ไม่ควรมีผู้ใช้เพียงคนเดียวที่ไม่ได้เป็นสมาชิกของกลุ่ม

  1. ในขั้นตอนที่สาม คุณต้องป้อน "กลุ่มการเข้าถึงของคู่สัญญา" โดยไดเรกทอรี "กลุ่มการเข้าถึงของคู่สัญญา" เป็นผู้รับผิดชอบในเรื่องนี้ ดูภาพประกอบ 5.

สำหรับตัวอย่างของเรา ได้แก่ ผู้ซื้อ ซัพพลายเออร์ อื่นๆ ดูภาพประกอบ 6.

  1. ในขั้นตอนนี้ คุณจะต้องกำหนดกลุ่มที่มีสิทธิ์เข้าถึงให้กับแต่ละองค์ประกอบของไดเร็กทอรี "คู่สัญญา" ดูภาพประกอบ 7.

กลุ่มการเข้าถึงสำหรับคู่สัญญาถูกกำหนดไว้ในแท็บ "อื่นๆ" ฉันมักจะใช้การประมวลผลมาตรฐานเสริมเพื่อกำหนดข้อมูลให้กับกลุ่ม “การประมวลผลไดเร็กทอรีและเอกสารแบบกลุ่ม” ช่วยให้คุณสามารถกำหนดกลุ่มที่ต้องการสำหรับรายละเอียดนี้ได้จำนวนมาก

  1. ขั้นตอนนี้เป็นขั้นตอนสุดท้าย ในขั้นตอนนี้ การเข้าถึง "กลุ่มผู้ใช้" ไปยัง "กลุ่มการเข้าถึงของคู่สัญญา" ได้รับการกำหนดค่าโดยใช้การประมวลผล "การตั้งค่าสิทธิ์การเข้าถึงในระดับบันทึก" ดูรูปที่ 1 8.

ความสัมพันธ์ระหว่างกลุ่มผู้ใช้กับกลุ่มการเข้าถึงของคู่สัญญาจะถูกเน้นด้วยสีแดง สำหรับกลุ่ม "ผู้จัดการฝ่ายจัดซื้อ" และ "ผู้จัดการฝ่ายขาย" ความสัมพันธ์จะได้รับการกำหนดค่าในลักษณะเดียวกันทุกประการ โดยระบุเฉพาะออบเจ็กต์การเข้าถึงเท่านั้นที่ควรมีสิทธิ์เข้าถึง เช่น เฉพาะ "ซัพพลายเออร์" หรือ "ผู้ซื้อ" เท่านั้น การตั้งค่าสถานะ เช่น "การมองเห็นในรายการ" เป็นสิทธิ์ของ "วัตถุการเข้าถึง" จากชื่อผมคิดว่าการทำงานของสิทธิ์เหล่านี้ชัดเจน

หลังจากการยักย้ายดังกล่าวข้างต้น คุณควรมีสิทธิ์เข้าถึงไดเร็กทอรี "คู่สัญญา" อย่างจำกัด

ไดเร็กทอรีที่เหลือได้รับการกำหนดค่าในลักษณะเดียวกัน

สำคัญ:

การเข้าถึงแบบจำกัดใช้ไม่ได้กับบทบาท "สิทธิ์แบบเต็ม"

ชุดบทบาทของผู้ใช้จะต้องมีบทบาท "ผู้ใช้"

หากคุณมีบทบาทของตนเอง คุณจะต้องแทรกเทมเพลตและข้อจำกัดลงในบทบาทของคุณ เช่นเดียวกับในบทบาท "ผู้ใช้" ที่เกี่ยวข้องกับไดเร็กทอรี "คู่สัญญา" (ดูโค้ดในบทบาทผู้ใช้โดยคลิกที่ไดเร็กทอรีคู่สัญญา)

บทบาทคือออบเจ็กต์ข้อมูลเมตาที่กำหนดว่าออบเจ็กต์ใดและการดำเนินการใดที่ผู้ใช้สามารถดำเนินการกับออบเจ็กต์นี้ได้ แต่ละบทบาทมีสิทธิ์ และข้อจำกัดในการเข้าถึงจะเกิดขึ้นขึ้นอยู่กับสิทธิ์ที่ผู้ดูแลระบบฐานข้อมูลกำหนด แพลตฟอร์มเทคโนโลยีให้สิทธิ์สองประเภท: พื้นฐานและโต้ตอบ โดยพื้นฐานแล้ว เราหมายถึงสิทธิ์ในการอ่าน แก้ไข เพิ่ม และลบ การโต้ตอบจะดำเนินการเฉพาะเมื่อดำเนินการต่างๆ เช่น การแก้ไขหรือการลบในรูปแบบ: การลบแบบโต้ตอบ การเพิ่มแบบโต้ตอบ และอื่นๆ

ด้วยวิธีนี้ คุณสามารถเปิดใช้งานการเข้าถึงไดเร็กทอรี เอกสาร และออบเจ็กต์เมตาดาต้าอื่นๆ ได้อย่างครบถ้วนเพียงครั้งเดียวและตลอดไป คุณสามารถให้สิทธิ์เข้าถึงหรือนำออกไปได้ คุณจะไม่สามารถให้เพียงเล็กน้อยได้ แต่สถานการณ์มักจะเกิดขึ้นเมื่อมีไดเร็กทอรีขนาดใหญ่และผู้ใช้แต่ละคนควรเห็นเฉพาะองค์ประกอบบางอย่างในไดเร็กทอรีนั้น นั่นคือตามเงื่อนไขเฉพาะบางอย่าง การเลือกองค์ประกอบวัตถุต้องเกิดขึ้น! และเริ่มต้นด้วยเวอร์ชันของแพลตฟอร์มเทคโนโลยี 1C 8.1 กลไกที่ทรงพลังมากในการจำกัดการเข้าถึงข้อมูลในระดับบันทึกที่เรียกว่า RLS (Record Level Security) ก็ปรากฏขึ้น ข้อจำกัดคือชุดของเงื่อนไขเฉพาะที่จะให้สิทธิ์การเข้าถึงหรือไม่ หากตรงตามเงื่อนไข

ข้อจำกัดการเข้าถึงเมื่อใช้ระบบ RLS แบบไดนามิกจะมีผลกับการดำเนินการพื้นฐาน: อ่าน แก้ไข เพิ่ม และลบ คุณลักษณะที่สำคัญคือการดำเนินการอ่านสามารถใช้ข้อจำกัดระดับเรกคอร์ดได้หลายรายการ ในขณะที่การดำเนินการอื่นๆ ทั้งหมดมีเงื่อนไขเดียวเท่านั้น กลไกนี้ช่วยให้คุณสามารถกำหนดข้อจำกัดได้ไม่เพียงแต่ในบางระเบียนเท่านั้น แต่ยังรวมถึงบางฟิลด์ของระเบียนด้วย ณ จุดใดคุณอาจต้องระบุฟิลด์รวมถึงฟิลด์พิเศษ<Прочие поля>.

ไวยากรณ์และภาษา RLS

Data Constraint Language ไม่มีอะไรมากไปกว่าภาษาคิวรี แต่ถูกลดทอนลงอย่างมาก หากเงื่อนไขประเมินเป็น TRUE ผู้ใช้ปัจจุบันจะได้รับอนุญาตให้เข้าถึงข้อมูล หากเป็น FALSE จะถูกปฏิเสธ อะไรคือความแตกต่างที่สำคัญจากภาษาคิวรีเต็มรูปแบบ?

จะมีตารางข้อมูลเพียงตารางเดียวเสมอในการสืบค้น RLS และจะถูกใช้สำหรับเงื่อนไขต่างๆ
ใช้เฉพาะโครงสร้าง FROM และ WHERE เท่านั้น
ในสถานการณ์ดังกล่าว คุณสามารถระบุตัวเลือกการทำงานและพารามิเตอร์เซสชันเป็นพารามิเตอร์การสืบค้นได้
ไม่อนุญาตให้ใช้ตารางเสมือน
คุณสามารถใช้เทมเพลตเพื่อสร้างข้อจำกัดได้
ตัวดำเนินการ TOTAL และ IN HIERARCHY ใช้ไม่ได้

พิจารณาวิธีการสร้างข้อจำกัด ตัวอย่างเช่นในรูป 1 แสดงข้อจำกัดที่ง่ายที่สุด ประกอบด้วยข้อเท็จจริงที่ว่าผู้ใช้จะเห็นคู่สัญญาเพียงรายเดียวที่มีชื่อเฉพาะว่า "Sibirskaya Korona LLC" คุณสามารถกรองตามฟิลด์เฉพาะได้ ตัวอย่างเช่น เราต้องการให้ผู้ใช้เห็นเฉพาะผู้รับเหมาที่อยู่ในโฟลเดอร์หลัก “พนักงาน”

คุณสามารถป้อนข้อความจำกัดด้วยตนเอง หรือป้อนโดยใช้ตัวสร้างคิวรีตามปกติก็ได้ ตัวออกแบบแบบสอบถามในกรณีนี้จะไม่สมบูรณ์เช่นกัน แต่จะมีข้อจำกัดสำหรับ RLS คุณยังสามารถส่งผ่านพารามิเตอร์ & ใดๆ ไปยังคำขอข้อจำกัดได้

ข้อจำกัดทำงานอย่างไร

บางครั้งเมื่อใช้ RLS ผู้ใช้อาจได้รับข้อผิดพลาดที่ระบุว่าตนมีสิทธิ์ไม่เพียงพอ อาจเนื่องมาจากวิธีการทำงานของข้อจำกัด

  • ทั้งหมด. นั่นคือในกระบวนการกำหนดข้อจำกัด การดำเนินการจะดำเนินการกับข้อมูลฐานข้อมูลที่จำเป็นทั้งหมด อย่างไรก็ตาม เมื่ออ่านและเปลี่ยนแปลงข้อมูล หากไม่เป็นไปตามข้อจำกัดสำหรับบางบันทึก ความล้มเหลวฉุกเฉินจะเกิดขึ้นเนื่องจากการละเมิดสิทธิ์การเข้าถึง
  • อนุญาต. วิธีการปฏิบัติงานซึ่งเป็นผลมาจากข้อจำกัดที่กำหนด ควรอ่านเฉพาะบันทึกที่ตรงตามเงื่อนไขเท่านั้น ในกรณีนี้ไม่มีความล้มเหลวฉุกเฉิน วัตถุที่ไม่ตรงตามข้อกำหนดถือว่าขาดหายไป

วิธีการ ALLOWED มักใช้ในการสร้างรายการไดนามิก มิฉะนั้นข้อผิดพลาดเกี่ยวกับการละเมิดสิทธิ์จะปรากฏขึ้นอย่างต่อเนื่อง เมธอด ALL ใช้ในการรับออบเจ็กต์ด้วยฟังก์ชันภาษาและคิวรีในตัว จริงๆ แล้ววิธีการเหล่านี้ติดตั้งอยู่ที่ไหน? ค่าเริ่มต้นคือทั้งหมด

การใช้เทมเพลตใน RLS

เพื่อให้การใช้ข้อ จำกัด สะดวกยิ่งขึ้น ระบบ 1C Enterprise จึงจัดให้มีการใช้เทมเพลต นั่นคือ หากคุณใช้ข้อจำกัดเดียวกันหรือคุณรู้ว่ามันจะแตกต่างกันในบางพารามิเตอร์เท่านั้น คุณก็จะสามารถสร้างเทมเพลตของคุณเองได้ ดังนั้น โดยทั่วไป คุณสามารถออกแบบโค้ดข้อจำกัดการทำซ้ำเป็นขั้นตอนได้ ข้อความมีรหัสโปรแกรมข้อ จำกัด คุณสามารถใช้พารามิเตอร์ได้เช่นเดียวกับในขั้นตอนและพารามิเตอร์จะถูกเน้นด้วยคำนำหน้า #

พิจารณาตัวอย่างของการกำหนดค่า 1C: การบัญชี 8.2 โดยใช้เทมเพลตในตัว มาเปิดบทบาทนักบัญชีและไปที่แท็บเทมเพลตข้อจำกัด เทมเพลตที่ใช้ในที่นี้คือ BasicConditionReading เนื้อหาต่อไปนี้:

โดยที่เราเห็น #Parameter(1)=UserAccessRightSettings.AccessObject นี่เป็นพารามิเตอร์ที่สามารถเปลี่ยนแปลงได้ขึ้นอยู่กับข้อมูลที่ส่ง นอกจากนี้ ในตำแหน่งใดก็ตามที่เราต้องการแนะนำข้อจำกัด เราจะใช้เทมเพลตดังนี้:

นั่นคือแทนที่จะเป็น

#Parameter(1)=การตั้งค่าสิทธิ์การเข้าถึงของผู้ใช้ วัตถุการเข้าถึง

ในข้อความเทมเพลตก็จะมี

องค์กร=UserAccessRightSettings.AccessObject

หรือบนเทมเพลตที่เรียบง่ายกว่า ชื่อของเทมเพลต #MyLimitations มีดังต่อไปนี้:

โดยที่ #Parameter(1) = &ผู้ใช้ปัจจุบัน

จากการส่งพารามิเตอร์ไปยังเทมเพลต #MyLimitations("Executor") เราจะได้รับสิ่งต่อไปนี้

WHERE Executor= &ผู้ใช้ปัจจุบัน

ผลลัพธ์

กลไกในการจำกัดการเข้าถึงข้อมูลในระดับบันทึกเป็นสิ่งที่ทรงพลังมาก แต่การตั้งค่านั้นต้องใช้ประสบการณ์อย่างมาก เนื่องจากคุณอาจหลงทางใน "ความดุร้าย" นี้ได้อย่างง่ายดาย ด้วยเหตุนี้จึงสามารถแบ่งเขตข้อมูลบางส่วนได้ ในทางกลับกัน การเพิ่มเงื่อนไขต่างๆ จะทำให้ประสิทธิภาพของระบบลดลง แม้ว่าจะเล็กน้อยก็ตาม เนื่องจากแพลตฟอร์ม 1C เพิ่มคำขอเพิ่มเติมให้กับคำขอของผู้ใช้ในรูปแบบของข้อจำกัด ในแง่อื่นๆ นี่เป็นเพียงสิ่งที่ยอดเยี่ยมสำหรับนักพัฒนา!

เวอร์ชันที่แปดของแพลตฟอร์ม 1C: Enterprise (วันนี้ 8.3) มีการเปลี่ยนแปลงมากมายที่เกี่ยวข้องกับ "เจ็ด" ซึ่งกลไกในการจำกัดสิทธิ์การเข้าถึงในระดับบันทึกนั้นมีความโดดเด่นเป็นพิเศษ แม้ว่าในทางทฤษฎีจะสามารถทำได้โดยไม่ต้องใช้มัน แต่ใช้เพียงบทบาทเท่านั้น RLS ช่วยให้คุณได้รับการตั้งค่าการเข้าถึงที่ละเอียดยิ่งขึ้น แต่ในการใช้งานกลไกนี้อย่างเหมาะสม คุณต้องเข้าใจสาระสำคัญของมันอย่างชัดเจนและมีประสบการณ์เพียงพอในการพัฒนาใน 1C

RLS คืออะไร?

สาระสำคัญของฟังก์ชันนี้คือความสามารถของนักพัฒนาในการป้องกันไม่ให้ผู้ใช้หรือกลุ่มผู้ใช้เฉพาะเข้าถึงตารางหรือฟิลด์ของตารางฐานข้อมูล โดยทั่วไปแล้ว ข้อจำกัดจะถูกใช้เพื่อป้องกันไม่ให้ผู้ใช้ 1C เห็นและแก้ไขข้อมูลที่เป็นความลับ เช่น การจำกัดพนักงานของบริษัทที่รวมอยู่ในกลุ่มเพื่อดูเอกสารสำหรับองค์กรของตนเท่านั้น นอกจากนี้ กลไกในการจำกัดสิทธิ์การเข้าถึงในระดับบันทึกสามารถใช้เพื่อลบข้อมูลที่ไม่จำเป็นออกจากอินเทอร์เฟซได้

หากต้องการเขียนแบบสอบถามสำหรับข้อจำกัด RLS คุณต้องสร้างบทบาทหรือรับบทบาทที่มีอยู่ การตั้งค่า RLS ใน 1C 8.3 สามารถใช้กับการกระทำของผู้ใช้ต่อไปนี้:

  • ส่วนที่เพิ่มเข้าไป;
  • การอ่าน;
  • ลบ;
  • เปลี่ยน.

นอกจากความเป็นไปได้ที่กว้างที่สุดในการปรับแต่งการเข้าถึงแล้ว RLS ยังมีข้อเสีย:

  1. ข้อกำหนดสำหรับคุณสมบัติของนักพัฒนา เนื่องจากคำขอจะต้องเขียนด้วยภาษาในตัว โดยคำนึงถึงกฎไวยากรณ์
  2. ขาดความสามารถในการแก้ไขเงื่อนไขอย่างรวดเร็ว
  3. ความเป็นไปได้ที่จำกัดในการอธิบายตรรกะ: เงื่อนไขที่ซับซ้อนเกินไปยังคงต้องเขียนลงในโมดูลของเอกสารและหนังสืออ้างอิง
  4. ในเวอร์ชันไคลเอ็นต์-เซิร์ฟเวอร์ของฐานข้อมูล การเติบโตโดยนัยของตารางที่รวมอยู่ในแบบสอบถามเป็นไปได้ ยิ่งไปกว่านั้น การติดตามกระบวนการนี้เป็นเรื่องยากมาก
  5. ข้อกำหนดด้านทรัพยากร ข้อจำกัด RLS ใช้พลังงานมากบนเครื่องไคลเอนต์และเซิร์ฟเวอร์
  6. มีเอกสารประกอบเล็กน้อยให้ใช้ฟรี

ปัญหาอื่นที่อาจเกิดขึ้นหลังจากตั้งค่า 1C RLS สามารถรายงานได้ ความจริงก็คือนักพัฒนาจัดเตรียมข้อจำกัด RLS ที่เป็นไปได้และสร้างรายงานในลักษณะที่แสดงเฉพาะข้อมูลที่ได้รับอนุญาตเท่านั้น หากผู้ใช้กำหนดค่าข้อจำกัด RLS ที่แตกต่างกัน ข้อมูลในรายงานสำหรับพารามิเตอร์เดียวกันอาจแตกต่างกัน สิ่งนี้อาจทำให้เกิดคำถาม ดังนั้นคุณต้องคำนึงถึงสถานการณ์เหล่านี้เมื่อออกแบบรายงานหรือเขียนแบบสอบถามใน RLS

สร้างข้อจำกัด RLS

ในการเพิ่มข้อจำกัด RLS คุณต้องค้นหาบทบาทที่ต้องการแล้วเปิดโดยดับเบิลคลิก

หน้าต่างที่เปิดขึ้นประกอบด้วย 2 แท็บ: "สิทธิ์" และ "เทมเพลตการจำกัด" หากต้องการกำหนดข้อจำกัดบางประการสำหรับการดำเนินการเฉพาะ คุณต้องเลือกและคลิกที่เครื่องหมายบวกสีเขียวที่ส่วนล่างขวา บรรทัดจะปรากฏขึ้นซึ่งเราสามารถตั้งค่าข้อ จำกัด 1C RLS ในภาษาที่สร้างใน 1C


หากคุณรู้ไวยากรณ์ 1C (เช่น หลังมือ) คุณสามารถเขียนลงในช่อง "การจำกัดการเข้าถึง" ได้โดยตรง นักพัฒนา 1C ได้จัดเตรียมความสามารถในการเปิดตัวสร้างแบบสอบถาม ซึ่งจะช่วยและแนะนำข้อจำกัดที่สามารถทำได้ หากต้องการเปิด คุณต้องคลิกที่ปุ่มที่มีจุดสามจุด (เลือก) หรือ F4 และหน้าต่างที่มีปุ่ม "Query Designer..." จะปรากฏขึ้น


ในหน้าต่างที่ปรากฏขึ้น คุณสามารถกำหนดค่าข้อจำกัดได้ไม่เพียงแต่สำหรับไดเร็กทอรีนี้เท่านั้น แต่ยังรวมถึงออบเจ็กต์ระบบอื่นๆ ด้วย ในการดำเนินการนี้ คุณจะต้องเพิ่มลงในแท็บ "ตารางและฟิลด์" เราลงทะเบียนข้อจำกัดในช่องของไดเร็กทอรี "ระบบการตั้งชื่อ" และคลิกที่ "ตกลง" โปรดใช้ความระมัดระวังเกี่ยวกับชื่อของตัวแปร: พารามิเตอร์ RLS ได้รับการตั้งค่าเมื่อเริ่มต้นเซสชันผู้ใช้ และจะต้องอยู่ในออบเจ็กต์ข้อมูลเมตา


บนแท็บ "เทมเพลตข้อ จำกัด" คุณระบุแบบสอบถามที่จำเป็นเมื่อคัดลอกการตั้งค่า RLS เดียวกันลงใน 1C 8.3 หลังจากที่คุณเพิ่มเทมเพลตแล้ว คุณสามารถใช้ชื่อเทมเพลตในการตั้งค่าสิทธิ์การเข้าถึงได้

นอกจากนี้ยังสามารถเพิ่มข้อจำกัดให้กับหลายบทบาทได้พร้อมๆ กัน ในการดำเนินการนี้ ในแผนผังการกำหนดค่า คุณต้องคลิกขวาที่ส่วน "บทบาท" และเลือก "บทบาททั้งหมด"


โดยสรุป ฉันอยากจะทราบว่าบทความนี้มุ่งเป้าไปที่ที่ปรึกษานักพัฒนา 1C และสามารถช่วยผู้ที่มีประสบการณ์ในการพัฒนา 1C:Enterprise เป็นหลักได้ แม้จะมีความเรียบง่ายที่ชัดเจน แต่ความรู้เกี่ยวกับความหมายและความเข้าใจในโครงสร้างของกระบวนการทางธุรกิจขององค์กรของตนเองหรือองค์กรของลูกค้าในการกระจายสิทธิ์ที่ถูกต้องนั้นจำเป็นต้องมีความรู้และประสบการณ์ในระดับหนึ่ง

1C มีระบบสิทธิ์การเข้าถึงในตัว (ระบบนี้เรียกว่าบทบาท 1C) ระบบนี้เป็นแบบคงที่ - ตามที่ผู้ดูแลระบบมอบหมายสิทธิ์ 1C มันจะเป็นอย่างนั้น

นอกจากนี้ยังมีระบบสิทธิ์การเข้าถึงแบบไดนามิก (เรียกว่า RLS 1C) ในนั้นสิทธิ์ 1C จะถูกคำนวณแบบไดนามิกในขณะที่ผู้ใช้ทำงานตามพารามิเตอร์ที่ระบุ

การตั้งค่าความปลอดภัยที่พบบ่อยที่สุดในโปรแกรมต่างๆ คือชุดสิทธิ์การอ่าน/เขียนสำหรับกลุ่มผู้ใช้ จากนั้นจึงรวมหรือแยกผู้ใช้ออกจากกลุ่ม ตัวอย่างเช่น มีการใช้ระบบที่คล้ายกันใน Windows AD (Active Directory)

ระบบรักษาความปลอดภัยใน 1C เรียกว่าบทบาท 1C บทบาท 1C อยู่ในการกำหนดค่าในสาขาทั่วไป/บทบาท บทบาท 1C ทำหน้าที่เป็นกลุ่มที่ได้รับมอบหมายสิทธิ์ 1C จากนั้นผู้ใช้จะถูกรวมหรือแยกออกจากกลุ่มนี้

เมื่อดับเบิลคลิกที่ชื่อของบทบาท 1C ตัวแก้ไขสิทธิ์สำหรับบทบาท 1C จะเปิดขึ้น ทางด้านซ้ายคือรายการวัตถุ 1C เลือกรายการใดรายการหนึ่งและตัวเลือกสำหรับสิทธิ์การเข้าถึงจะปรากฏทางด้านขวา (อย่างน้อย: อ่าน เพิ่ม เปลี่ยนแปลง ลบ)

สำหรับสาขาบนสุด (ชื่อของการกำหนดค่าปัจจุบัน) จะมีการสร้างสิทธิ์ผู้ดูแลระบบ 1C และการเข้าถึงเพื่อเปิดใช้งานตัวเลือกต่างๆ

สิทธิ์ 1C ทั้งหมดแบ่งออกเป็นสองกลุ่ม - สิทธิ์ "แบบง่าย" และสิทธิ์แบบเดียวกันโดยเพิ่ม "แบบโต้ตอบ" มันหมายความว่าอะไร?

เมื่อผู้ใช้เปิดแบบฟอร์ม (เช่น กำลังประมวลผล) และกดปุ่มบนแบบฟอร์ม โปรแกรมในภาษา 1C ในตัวจะดำเนินการบางอย่าง เช่น การลบเอกสาร สิทธิ์ 1C “เพียง” มีหน้าที่รับผิดชอบในการอนุญาตการดำเนินการเหล่านี้ (ดำเนินการโดยทางโปรแกรม)

เมื่อผู้ใช้เปิดบันทึกประจำวันและเริ่มทำบางสิ่งโดยใช้แป้นพิมพ์อย่างอิสระ (เช่น การป้อนเอกสารใหม่) สิ่งเหล่านี้ถือเป็นสิทธิ์ 1C แบบ "โต้ตอบ"

ผู้ใช้อาจมีสิทธิ์เข้าถึงหลายบทบาท ซึ่งในกรณีนี้สิทธิ์จะถูกสะสม

รายละเอียดของความเป็นไปได้ในการตั้งค่าสิทธิ์การเข้าถึงโดยใช้บทบาท – วัตถุ 1C นั่นคือคุณสามารถเปิดใช้งานการเข้าถึงไดเร็กทอรีหรือปิดใช้งานได้ คุณไม่สามารถเปิดใช้งานได้สักหน่อย

เพื่อจุดประสงค์นี้ มีส่วนขยายของระบบบทบาท 1C ที่เรียกว่า 1C RLS นี่คือระบบสิทธิ์การเข้าถึงแบบไดนามิกที่ช่วยให้คุณสามารถจำกัดการเข้าถึงได้บางส่วน ตัวอย่างเช่น ผู้ใช้เห็นเฉพาะเอกสารสำหรับคลังสินค้าและองค์กรบางแห่ง และจะไม่เห็นส่วนที่เหลือ

อย่างระมัดระวัง! เมื่อใช้รูปแบบ RLS 1C ที่สร้างความสับสน ผู้ใช้ที่แตกต่างกันอาจมีคำถามเมื่อพยายามกระทบยอดรายงานเดียวกันที่สร้างจากผู้ใช้ที่แตกต่างกัน

คุณยึดถือไดเร็กทอรีบางอย่าง (เช่น องค์กร) และสิทธิ์บางอย่าง (เช่น การอ่าน) คุณอนุญาตให้อ่านบทบาท 1C ในแผงการจำกัดการเข้าถึงข้อมูล คุณตั้งค่าข้อความสืบค้นซึ่งส่งคืน TRUE หรือ FALSE ขึ้นอยู่กับการตั้งค่า โดยปกติการตั้งค่าจะถูกจัดเก็บไว้ในการลงทะเบียนข้อมูล (เช่น ข้อมูลการกำหนดค่าการลงทะเบียนการตั้งค่าการบัญชีและสิทธิ์การเข้าถึงของผู้ใช้)

แบบสอบถามนี้ดำเนินการแบบไดนามิก (เมื่อพยายามใช้การอ่าน) สำหรับแต่ละรายการไดเรกทอรี ดังนั้น สำหรับเรกคอร์ดที่แบบสอบถามความปลอดภัยส่งคืน TRUE ผู้ใช้จะเห็นข้อมูลนั้น แต่ส่วนที่เหลือจะไม่เห็น
สิทธิ์ 1C ที่อยู่ภายใต้ข้อจำกัด RLS 1C จะถูกเน้นด้วยสีเทา

การคัดลอกการตั้งค่า RLS 1C เดียวกันทำได้โดยใช้เทมเพลต คุณสร้างเทมเพลต ตั้งชื่อ (เช่น) MyTemplate และระบุคำขอความปลอดภัยในนั้น ถัดไปในการตั้งค่าสิทธิ์การเข้าถึง 1C ให้ระบุชื่อเทมเพลตดังนี้: “#MyTemplate”

เมื่อผู้ใช้ทำงานในโหมด 1C Enterprise เมื่อใช้งาน RLS 1C เขาอาจได้รับข้อความแสดงข้อผิดพลาด "สิทธิ์ไม่เพียงพอ" (เช่น เพื่ออ่านไดเร็กทอรี xxxx)

ซึ่งหมายความว่า RLS 1C ได้บล็อกการอ่านหลายบันทึก

เพื่อป้องกันไม่ให้ข้อความดังกล่าวปรากฏขึ้น จำเป็นต้องใช้คำว่า ALLOWED () ในข้อความคำขอในภาษา 1C ในตัว

ตัวอย่างเช่น: