ภูมิทัศน์การอนุญาตสำหรับแอปพลิเคชัน Rust มีผู้แข่งขันรายใหม่อย่าง Gatehouse ซึ่งเป็นไลบรารีการอนุญาตที่ยืดหยุ่นที่กำลังดึงดูดความสนใจจากนักพัฒนาด้วยแนวทางหลายรูปแบบและการออกแบบที่เป็นมิตรต่อนักพัฒนา ไลบรารีนี้รวมนโยบายการควบคุมการเข้าถึงแบบอิงบทบาท (RBAC) แบบอิงคุณลักษณะ (ABAC) และแบบอิงความสัมพันธ์ (ReBAC) เข้าด้วยกัน นำเสนอชุดเครื่องมือที่ครอบคลุมสำหรับนักพัฒนา Rust ในการใช้งานระบบการอนุญาต
การออกแบบแบบ Async-First จุดประกายการสนทนา
สถาปัตยกรรมที่เป็นมิตรกับ async ของ Gatehouse ได้กลายเป็นจุดสนใจของการสนทนาในชุมชน ไลบรารีนี้ใช้ฟังก์ชัน async สำหรับการตรวจสอบนโยบาย ซึ่งนักพัฒนาบางคนตั้งคำถามเนื่องจากการตรวจสอบการอนุญาตส่วนใหญ่ไม่จำเป็นต้องมีการดำเนินการ I/O โดยธรรมชาติ ผู้ดูแลโครงการได้อธิบายว่าการเลือกการออกแบบนี้เป็นไปโดยเจตนาเพื่อรองรับสถานการณ์เช่นการเดินทางในกราฟในการอนุญาตแบบอิงความสัมพันธ์และเพื่อเปิดใช้งานการลัดวงจรของการดำเนินการที่มีค่าใช้จ่ายสูง
ผมต้องการสนับสนุนการลัดวงจรเพื่อที่จะข้ามการเรียก IO ที่มีค่าใช้จ่ายสูงโดยการส่งคืนค่าแต่เนิ่นๆ จากนโยบายที่ไม่จำเป็นต้องทำการเรียกนั้น
แนวทางนี้ให้ความยืดหยุ่นสำหรับแอปพลิเคชันที่อาจต้องทำการค้นหาฐานข้อมูลหรือเรียกบริการระหว่างการตรวจสอบการอนุญาต ในขณะที่ยังคงอนุญาตให้มีการประเมินนโยบายในหน่วยความจำที่ง่ายกว่า การเลือกการออกแบบนี้สะท้อนถึงแนวคิดที่มองไปข้างหน้าซึ่งช่วยให้นักพัฒนาสามารถเริ่มต้นด้วยโมเดลการอนุญาตที่ง่ายกว่าและพัฒนาไปสู่โมเดลที่ซับซ้อนมากขึ้นโดยไม่ต้องปรับโครงสร้างใหม่อย่างมีนัยสำคัญ
การเปรียบเทียบกับทางเลือกแบบ DSL
นักพัฒนาหลายคนในความคิดเห็นได้เปรียบเทียบ Gatehouse กับเฟรมเวิร์กการอนุญาตอื่นๆ เช่น Cedar ซึ่งใช้ภาษาเฉพาะโดเมน (DSL) สำหรับการกำหนดนโยบาย ในขณะที่ DSL มีข้อดีเช่นความเข้ากันได้ข้ามภาษาและความสามารถในการจัดเก็บนโยบายเป็นข้อมูลแทนโค้ด นักพัฒนาบางคนแสดงความชื่นชมต่อแนวทางแบบ Rust ดั้งเดิมของ Gatehouse
การสนทนาได้เน้นย้ำถึงการแลกเปลี่ยนที่สำคัญ: ระบบที่ใช้ DSL ให้ความยืดหยุ่นมากกว่าสำหรับองค์กรที่ต้องการแบ่งปันนโยบายระหว่างภาษาโปรแกรมที่แตกต่างกันหรือจัดการนโยบายเป็นข้อมูล ในขณะที่แนวทางแบบโค้ดดั้งเดิมเช่น Gatehouse ให้การบูรณาการที่แน่นแฟ้นกับแอปพลิเคชันและอาจมีขั้นตอนการทำงานของนักพัฒนาที่ง่ายกว่าสำหรับโครงการที่เล็กกว่า
ความท้าทายในการเข้าถึงข้อมูล
ประเด็นที่เกิดขึ้นซ้ำในการสนทนาของชุมชนคือปัญหาการเขียนแบบคู่และความท้าทายเกี่ยวกับการเข้าถึงข้อมูลสำหรับการตัดสินใจอนุญาต ผู้แสดงความคิดเห็นคนหนึ่งชี้ให้เห็นว่าเครื่องมือนโยบายเพียงอย่างเดียวไม่เพียงพอสำหรับระบบการอนุญาตที่ครอบคลุม - พวกเขายังต้องการการเข้าถึงข้อมูลที่จำเป็นในการตัดสินใจอนุญาต
สิ่งนี้เน้นย้ำข้อพิจารณาที่สำคัญสำหรับนักพัฒนาที่ใช้งาน Gatehouse: ในขณะที่ไลบรารีให้การประเมินนโยบายที่ยืดหยุ่น แอปพลิเคชันยังคงต้องกำหนดวิธีการดึงและให้ข้อมูลที่จำเป็นแก่เครื่องมือนโยบายอย่างมีประสิทธิภาพ ไม่เหมือนกับเฟรมเวิร์กที่มีความคิดเห็นมากกว่า Gatehouse ปล่อยให้แง่มุมนี้เป็นหน้าที่ของนักพัฒนาแอปพลิเคชัน โดยใช้แนวทางนำการจัดเก็บข้อมูลของคุณเองมาใช้ ซึ่งผู้แสดงความคิดเห็นบางคนชื่นชมเป็นพิเศษ
ข้อพิจารณาเกี่ยวกับการจัดระเบียบโค้ด
ข้อสังเกตทางเทคนิคบางประการจากชุมชนมุ่งเน้นไปที่การจัดระเบียบโค้ดของไลบรารี โดยผู้แสดงความคิดเห็นคนหนึ่งสังเกตเห็นขนาดใหญ่ของไฟล์ไลบรารีหลัก สิ่งนี้จุดประกายการสนทนาสั้นๆ เกี่ยวกับแนวทางปฏิบัติในการจัดระเบียบโค้ดใน Rust โดยผู้ดูแลยอมรับว่าการแยกไฟล์ขนาดใหญ่จะเป็นประโยชน์ ข้อเสนอแนะจากชุมชนเช่นนี้แสดงให้เห็นถึงลักษณะของการทำงานร่วมกันในการพัฒนาโอเพนซอร์สและให้ข้อมูลที่มีค่าสำหรับการปรับปรุงในอนาคต
โดยสรุป Gatehouse เป็นการเพิ่มเติมที่น่าสนใจสำหรับระบบนิเวศ Rust สำหรับนักพัฒนาที่กำลังมองหาโซลูชันการอนุญาตแบบเนทีฟที่ยืดหยุ่น แนวทางหลายรูปแบบและการออกแบบที่เป็นมิตรกับ async ของมันให้พื้นฐานที่มั่นคงสำหรับการใช้งานระบบการอนุญาตที่ซับซ้อน แม้ว่านักพัฒนาจะต้องพิจารณาอย่างรอบคอบว่าจะบูรณาการกับรูปแบบการเข้าถึงข้อมูลของพวกเขาอย่างไร เช่นเดียวกับไลบรารีที่เกี่ยวข้องกับความปลอดภัยหลายแห่ง ทางเลือกที่ถูกต้องขึ้นอยู่กับข้อกำหนดเฉพาะของโครงการและข้อจำกัดขององค์กรเป็นอย่างมาก
อ้างอิง: Gatehouse