1c 8.3 ผู้ใช้ปัจจุบันที่รับผิดชอบ วิธีค้นหาว่าผู้ใช้ปัจจุบันมีบทบาทบางอย่างหรือไม่

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

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

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

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

หากประเภทพารามิเตอร์เซสชัน:

  • แก้ไขอาร์เรย์
  • คอลเลกชันคงที่
  • โครงสร้างคงที่

จากนั้นค่าขององค์ประกอบคอลเลกชันสามารถเป็นได้ ไม่ได้กำหนด.

พื้นที่หลักของพารามิเตอร์คือการใช้ค่าในคำขอ RLS (การจำกัดการเข้าถึงที่ระดับเรกคอร์ด)

ตัวอย่างเช่น เราจำเป็นต้องกำหนดเงื่อนไขสำหรับผู้ใช้ปัจจุบันในคำขอ RLS ในการทำเช่นนี้ เราตั้งค่าพารามิเตอร์เซสชัน "CurrentUser" จากรหัสของภาษาในตัว ตั้งค่า:

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

Table.User = &ผู้ใช้ปัจจุบัน

การใช้พารามิเตอร์เซสชันในลักษณะนี้จะไม่คำนึงถึงสิทธิ์การอ่านของพารามิเตอร์ แต่คุณสามารถลองรับค่าจากภาษาในตัวได้:

CurrentUser = SessionParameters.CurrentUser;


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

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

ขั้นตอนการตั้งค่า SessionParameters(SessionParameterNames) ถ้า SessionParameterName ไม่ได้กำหนด ดังนั้น IfParameterName = "CurrentUser" จากนั้น SessionParameters.CurrentUser = ; ElseIf ParameterName = " CurrentOrganization" จากนั้น SessionParameters.CurrentOrganization = ; // ฯลฯ สิ้นสุดถ้า; สิ้นสุดถ้า; EndProcedurevalue>value>>

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

  • รุ่นปัจจุบัน 1C
  • ตัวอย่างโค้ดบนแพลตฟอร์ม 1C
บทบาท สิทธิ์การเข้าถึงใน 1C 8.x
ฉันจะทราบได้อย่างไรว่าผู้ใช้ปัจจุบันมีบทบาทบางอย่าง
ถ้าไม่ใช่ RoleAvailable("ผู้จัดการ") ให้รายงาน("ไม่อนุญาตให้ดูคำสั่งซื้อจากผู้ซื้อ!"); สิ้นสุดถ้า;
จะรับข้อมูลเกี่ยวกับบทบาทการกำหนดค่าได้อย่างไร
รายการฟังก์ชันของบทบาทการกำหนดค่าที่เป็นไปได้ () รายการบทบาท = รายการค่าใหม่; ConfigRoles = Metadata.Roles; สำหรับแต่ละบทบาทจาก RoleConfiguration Loop ListRoles.Add(Role.Name); EndCycle; รายการส่งคืนบทบาท; EndFunctions
จะรันโค้ดโดยไม่ตรวจสอบสิทธิ์ได้อย่างไร?
1. ใช้โมดูลพิเศษ 2. ตำแหน่ง รหัสโปรแกรมซึ่งควรดำเนินการโดยไม่มีการควบคุมข้อจำกัด ในโมดูลทั่วไปที่มีการตั้งค่าสถานะ PRIVILEGE สำหรับโมดูล ใช้โหมดพิเศษของการดำเนินการรหัสโปรแกรม คล้ายกับโหมดการทำงานของรหัสของโมดูลพิเศษ โหมดสามารถเปิด/ปิดได้โดยใช้ภาษาในตัว: SetPrivilegedMode(<Включить>) พารามิเตอร์<Включить>(จำเป็น) ประเภท: บูลีน กำหนดว่าจะเปิดใช้งานโหมดสิทธิพิเศษหรือไม่: จริง - เปิดใช้งานโหมด; เท็จ - ปิดโหมด ฟังก์ชัน PrivilegedMode() ช่วยให้คุณกำหนดได้ว่าโหมดสิทธิพิเศษเปิดใช้งานอยู่หรือไม่ การใช้โหมดสิทธิพิเศษช่วยให้การทำงานเร็วขึ้นเนื่องจากจะไม่มีข้อ จำกัด ในการเข้าถึงข้อมูลและประการที่สองจะช่วยให้คุณสามารถดำเนินการกับข้อมูลในนามของผู้ใช้ที่ไม่มีข้อมูลนี้ แนะนำให้ใช้โหมดสิทธิพิเศษเมื่อจำเป็นต้องปิดการตรวจสอบสิทธิ์ หรือเมื่อคุณสามารถปิดการตรวจสอบสิทธิ์เพื่อเร่งความเร็ว อนุญาตให้ใช้โหมดสิทธิพิเศษเมื่อทำงานกับข้อมูลในนามของผู้ใช้บางรายที่ไม่ละเมิดสิทธิ์การเข้าถึงที่ตั้งไว้สำหรับผู้ใช้รายนี้

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

การใช้พารามิเตอร์เซสชันใน 1C

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

ตัวอย่างการตั้งค่าพารามิเตอร์เซสชัน 1C

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

ในแผนผังข้อมูลเมตา มาสร้างพารามิเตอร์เซสชันใหม่ - CurrentUser กำหนดประเภทให้ - DirectoryReference.Individuals:

รับบทเรียนวิดีโอ 267 1C ฟรี:

ในโมดูลเซสชัน มาสร้างขั้นตอนที่จะกำหนดพารามิเตอร์เซสชันปัจจุบัน:

รหัสขั้นตอน:

ขั้นตอนการตั้งค่าSessionParameters(RequiredParameters) // เรากำลังมองหาทางกายภาพ เผชิญกับชื่อผู้ใช้ CurrentUser = ไดเร็กทอรี บุคคล FindByName(ชื่อผู้ใช้() ); // ถ้าไม่เจอให้สร้างใหม่หากผู้ใช้ปัจจุบัน ว่าง () จากนั้น NewUser = ไดเรกทอรี บุคคล CreateElement() ; ผู้ใช้ใหม่. ชื่อ = ชื่อผู้ใช้ (); ผู้ใช้ใหม่. เขียน() ; ผู้ใช้ปัจจุบัน = ผู้ใช้ใหม่ ลิงค์; สิ้นสุดถ้า ; // กำหนดพารามิเตอร์เซสชัน CurrentUser ลิงก์ไปยังไดเร็กทอรีของบุคคลพารามิเตอร์เซสชัน CurrentUser = ผู้ใช้ปัจจุบัน; จบขั้นตอน

กำลังโหลด...
สูงสุด