โมดูลมุมมอง: วิธี จำกัด การเข้าถึงโดยผู้ใช้


8

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

เป็นวิธีที่ดีที่สุดในการสร้างปลั๊กอินการเข้าถึงมุมมองที่กำหนดเอง? ฉันไม่ได้มีประสบการณ์มากมายกับสิ่งนี้

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

ความคิดใด ๆ หรือฉันกำลังทำสิ่งนี้ซับซ้อนกว่าที่ควรจะเป็น?

ขอบคุณเบ็น


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

เจมี่ขอบคุณสำหรับการตอบกลับ จริงๆแล้วฉันใช้ Drupal Commerce เพื่อสร้างร้านค้าออนไลน์ที่มีเอกลักษณ์ ในฐานะที่เป็นแท็บในแต่ละโหนดผลิตภัณฑ์ (นอกเหนือจากแท็บมุมมองและแก้ไข) ฉันต้องการสร้างแท็บเพิ่มเติมที่เรียกว่า "คำสั่งซื้อ" ซึ่งจะเป็นมุมมองที่แสดงคำสั่งซื้อทั้งหมดที่รวมผลิตภัณฑ์นั้นไว้ ผู้จัดหาผลิตภัณฑ์เฉพาะคือผู้ใช้ที่ฉันต้องการเห็นมุมมอง "คำสั่งซื้อ" สำหรับผลิตภัณฑ์นั้น
BenK

ด้วยวิธีนี้ซัพพลายเออร์สามารถตรวจสอบยอดขายของผลิตภัณฑ์ของตนอย่างต่อเนื่อง แต่ฉันไม่ต้องการให้สิทธิ์การเข้าถึงแก่ทุกคนที่มีบทบาท "ซัพพลายเออร์" เพราะซัพพลายเออร์รายใดจะสามารถดูการขายผลิตภัณฑ์ของซัพพลายเออร์รายอื่นได้ ทำให้รู้สึก? ;-) --Ben
BenK

คำตอบ:


5

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


ขอบคุณสำหรับคำแนะนำ! ฉันลงเอยด้วยการทำตามวิธีการทั่วไปนี้ (ซึ่งแนะนำโดย Berdir) แต่สร้างเขตข้อมูลอ้างอิงผู้ใช้ในแต่ละโหนดชื่อ field_usercanaccess ฉันสามารถใช้ hook_menu () และกำหนด callback access ที่ทำให้แน่ใจว่าผู้ใช้ปัจจุบันตรงกับผู้ใช้ที่อ้างอิงในฟิลด์ มิฉะนั้นแท็บ (และมุมมอง) จะไม่ปรากฏขึ้น มันใช้งานได้ดีมาก! :-)
BenK

@BKK ยอดเยี่ยม! ฉันดีใจที่คุณมีบางอย่างทำงาน ในฐานะที่เป็นส่วนหนึ่งของการช่วยให้ Drupal Answers เป็นแหล่งข้อมูลที่ดีคุณควรลงคะแนนในคำตอบ (หรือคำถาม) ที่คุณเห็นว่ามีประโยชน์ ดังนั้นคุณควรจะลงคะแนนให้คำตอบ @ Berdir (และเหมือง แต่นี้ไม่ได้ฉันพยายามที่จะได้รับคะแนนเสียงก็พยายามที่จะทำให้คำตอบ Drupal เว็บไซต์ที่ดีกว่า)
Chaulky

ขอบคุณ :-) ฉันยังใหม่กับการแลกเปลี่ยนแบบสแต็คและฉันมีเพียง 13 คะแนน เมื่อฉันพยายามลงคะแนนก็แจ้งว่าฉันต้องการ 15 คะแนนเพื่อลงคะแนน ดังนั้นหากมีคนสำรองสองคะแนน (หรือฉันสามารถหาวิธีอื่นได้) ฉันจะลงคะแนนให้กับคำตอบและคำถามอย่างแน่นอน --Ben
BenK

@BenK โอ้ถูกต้องฉันลืมเกี่ยวกับขีด จำกัด 15 จุด คุณสามารถลองตอบคำถาม ... หนึ่ง upvote ในคำตอบของคุณได้รับ 10 ตัวแทน
Chaulky

6

ลองใช้โมดูลการเข้าถึงการเรียกกลับของViews

จัดเตรียมการควบคุมการเข้าถึงตามการเรียกกลับสำหรับ Views

ฟังก์ชั่นการโทรกลับที่มีอยู่จะถูกกำหนดโดยโมดูลที่ใช้hook_views_access_callbacks()ฟังก์ชั่น (ในลักษณะเดียวกับในhook_perm()) จากนั้นสามารถตั้งค่าในการกำหนดค่า "การ จำกัด การเข้าถึง" ของมุมมอง


การใช้มุมมองการเรียกกลับเข้าถึงทำงานได้ดีมากยกเว้นข้อผิดพลาดร้ายแรง ดูที่นี่: drupal.stackexchange.com/questions/3336/... ดูเหมือนจะเป็นทางไป - แต่จะแก้ไขได้อย่างไร?
Druvision

2

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

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

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

เจอร์รี่


1

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

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


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

ฉันจะลองดูแล้วรายงานกลับ
BenK

0

ใช่แล้วมันสมเหตุสมผลมากขึ้น ฉันคิดว่าคุณทำได้ (อาจจะไม่แน่ใจ 100%) ใช้มุมมองและการโต้แย้ง ตั้งค่าอาร์กิวเมนต์ให้เป็น ID ผู้ใช้ที่นำมาจากผู้ใช้ที่เข้าสู่ระบบในปัจจุบันและทำให้อาร์กิวเมนต์เริ่มต้นไม่แสดงผลใด ๆ มันน่าจะทำได้แม้ว่าฉันจะไม่รู้ว่ามันจะปลอดภัยแค่ไหน หากคุณลองทำโพสต์กลับและแจ้งให้เราทราบความคืบหน้าของคุณ


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.