คำถามติดแท็ก access-control

2
การควบคุมการเข้าถึงตามบทบาทที่ได้รับอนุญาต
ฉันพยายามที่จะเข้าใจถึงการแลกเปลี่ยนระหว่างบทบาทและสิทธิ์ต่าง ๆ เมื่อพูดถึงการควบคุมการเข้าถึง (การอนุญาต) เริ่มจากสิ่งที่กำหนดไว้: ในระบบของเราการอนุญาตจะเป็นหน่วยการเข้าถึงที่ละเอียด (" แก้ไขทรัพยากร X ", " เข้าถึงหน้าแดชบอร์ด " ฯลฯ ) บทบาทจะเป็นคอลเลกชันของ 1+ สิทธิ์ ผู้ใช้สามารถมีบทบาท 1+ ความสัมพันธ์เหล่านี้ทั้งหมด (ผู้ใช้, บทบาท, การอนุญาต) จะถูกเก็บไว้ในฐานข้อมูลและสามารถเปลี่ยนแปลงได้ทันทีและตามความจำเป็น ความกังวลของฉัน: (1) "เลวร้าย" เกี่ยวกับการตรวจสอบบทบาทสำหรับการควบคุมการเข้าถึงอย่างไร จะได้ประโยชน์อะไรบ้างจากการตรวจสอบการอนุญาตแทน กล่าวอีกนัยหนึ่งอะไรคือความแตกต่างระหว่างตัวอย่างโค้ดด้านล่าง: if(SecurityUtils.hasRole(user)) { // Grant them access to a feature } // vs. if(SecurityUtils.hasPermission(user)) { // Grant them access to …

6
การประเมินโค้ดแบบไดนามิกใน Java - เคลฟเวอร์หรือเลอะเทอะ?
ฉันกำลังพยายามสร้างเฟรมเวิร์ก ACL ที่ยืดหยุ่นใน Java สำหรับแอปพลิเคชันของฉัน กรอบ ACL หลายคนที่ถูกสร้างขึ้นในรายการที่อนุญาตของกฎที่กฎอยู่ในรูปแบบของการใช้: การกระทำ: ทรัพยากร ตัวอย่างเช่น, "JOHN สามารถดูทรัพยากร FOOBAR-1" "MARY สามารถดูทรัพยากร FOOBAR-1" "MARY สามารถแก้ไขทรัพยากร FOOBAR-1" สิ่งนี้เป็นสิ่งที่น่าสนใจเนื่องจากกฎสามารถทำให้เป็นอนุกรม / คงอยู่กับฐานข้อมูลได้อย่างง่ายดาย แต่แอปพลิเคชันของฉันมีตรรกะทางธุรกิจที่ซับซ้อน ตัวอย่างเช่น, "ผู้ใช้ทุกคนในแผนก 1 ที่มีอาวุโสกว่า 5 ปีสามารถดูทรัพยากร FOOBAR-1 ไม่ได้รับอนุญาต" "ผู้ใช้ทุกคนในแผนก 2 หากวันที่หลังวันที่ 15/15/2016 สามารถดูทรัพยากร FOOBAR-2 ไม่ได้รับอนุญาต" เมื่อคิดเป็นครั้งแรกมันจะเป็นฝันร้ายที่จะสร้างโครงสร้างของฐานข้อมูลที่สามารถจัดการกับกฎที่ซับซ้อนเช่นนี้ ดังนั้นดูเหมือนว่าฉันจะต้อง "อบ" พวกเขาลงในใบสมัครที่รวบรวมการประเมินพวกเขาสำหรับผู้ใช้แต่ละคนและจากนั้นผลิตเจ้าของ: การกระทำ:กฎทรัพยากรเป็นผลมาจากการประเมินผล ฉันต้องการหลีกเลี่ยงการอบตรรกะในแอปพลิเคชันที่รวบรวม ดังนั้นฉันคิดของการเป็นตัวแทนของการปกครองในรูปแบบของคำกริยา : การกระทำ: ทรัพยากรที่สรุปคือการแสดงออกบูลที่กำหนดว่าผู้ใช้ที่ได้รับอนุญาต เพรดิเคตจะเป็นสตริงของนิพจน์ …

6
ตกลงหรือไม่ที่จะมีชั้นตรวจสอบความถูกต้องก่อนเลเยอร์ควบคุมการเข้าถึง
ฉันกำลังสร้างแอปพลิเคชันเว็บที่มีโครงสร้าง API และในแอปพลิเคชันนี้เรามีเลเยอร์ต่างๆที่ทำงานของตนเอง ชั้นแรกคือการตรวจสอบชั้นที่ผู้ใช้ป้อนข้อมูลตรวจสอบและถ้ามันผ่านการตรวจสอบเราย้ายที่ชั้นที่สอง (ซึ่งก็คือการควบคุมการเข้าถึงชั้น) มิฉะนั้นกลับเกิดข้อผิดพลาด เลเยอร์ที่สองคือการควบคุมการเข้าถึงซึ่งตรวจสอบว่าผู้ใช้มีสิทธิ์ในการทำงานที่ต้องการหรือไม่หากผู้ใช้ได้รับอนุญาตจะย้ายคำร้องขอไปยังเลเยอร์ถัดไปมิฉะนั้นจะส่งคืนข้อความแสดงข้อผิดพลาด ชั้นที่สามคือชั้นควบคุมที่เรามีตรรกะของแอปพลิเคชัน คำถามของฉันคือว่าตกลงที่จะมีชั้นตรวจสอบก่อนการควบคุมการเข้าถึง? เกิดอะไรขึ้นถ้าผู้ใช้พยายามที่จะทำงานที่ผู้ใช้ไม่ได้รับอนุญาตและเราจะส่งกลับข้อผิดพลาดการตรวจสอบ? ผู้ใช้จะส่งคำขอไปยังปลายทางและพูดคุยกับเลเยอร์การตรวจสอบและเมื่อผ่านการตรวจสอบแล้วเขาจะเห็นข้อความYou can't access this! ฉันรู้สึกแปลก ๆ ดังนั้นมันดีเหมือนนี้หรืออะไรเป็นทางเลือกอื่นของฉันในโครงสร้างพื้นฐานนี้

2
วิธีการออกแบบการควบคุมการเข้าถึงตามบทบาท?
ฉันกำลังพยายามติดตามรูปแบบการควบคุมการเข้าถึงฐานบทบาทเพื่อ จำกัด สิ่งที่ผู้ใช้สามารถทำได้หรือไม่สามารถทำได้ในระบบของฉัน จนถึงตอนนี้ฉันมีหน่วยงานดังต่อไปนี้: users - ผู้ที่จะใช้ระบบ ที่นี่ฉันมีชื่อผู้ใช้และรหัสผ่าน role - การรวบรวมบทบาทที่ผู้ใช้สามารถมีได้ ทรัพยากรต่างๆ เช่นผู้จัดการผู้ดูแลระบบ ฯลฯ - สิ่งที่ผู้ใช้สามารถจัดการได้ เช่นเดียวกับสัญญาผู้ใช้ร่างสัญญา ฯลฯ การดำเนินการ - สิ่งที่ผู้ใช้สามารถทำกับทรัพยากร ชอบสร้างอ่านอัปเดตหรือลบ ตอนนี้ความสงสัยของฉันเพิ่มขึ้นที่นี่ในแผนภาพที่ฉันมีความสัมพันธ์เช่นนี้: การดำเนินงาน (0 .. *) จะดำเนินการเมื่อ ทรัพยากร (0 .. *) ซึ่งจะสร้างตารางที่ผมเรียกว่าสิทธิ์และที่จะจัดเก็บการดำเนินงานและทรัพยากร ตารางสิทธิ์จะมีลักษณะเช่นนี้ (หนึ่งแถว): ID: 1, การดำเนินการ:สร้าง, ทรัพยากร:สัญญา ซึ่งหมายถึงการได้รับอนุญาตในการสร้างสัญญา ฉันทำอย่างนี้เพราะฉันรู้สึกว่าทรัพยากรบางอย่างอาจไม่มีการดำเนินการทุกประเภท ตัวอย่างเช่นสำหรับการลงทะเบียนสัญญาผู้ใช้สามารถอัปโหลดไฟล์ได้ แต่การดำเนินการนี้ไม่สามารถใช้สำหรับการลงทะเบียนผู้ให้บริการได้ ดังนั้นตอนนี้เมื่อผู้ดูแลระบบจะให้สิทธิ์กับบทบาทเขาจะไม่มีรายชื่อของทรัพยากรที่มีการดำเนินการทุกครั้งที่ลงทะเบียนในระบบ ฉันคิดว่าแต่ละแหล่งข้อมูลมีการรวบรวมการดำเนินงานของตนเองที่สามารถดำเนินการกับเขาได้ ฉันสามารถชี้แจงได้หากบางสิ่งไม่เข้าใจ นี่เป็นวิธีที่ถูกต้องในการติดตั้ง rbac หรือไม่? แก้ไข …

1
อะไรคือแผนงานที่แนะนำให้นำไปใช้ในการควบคุมการเข้าถึงแบบง่าย (ABAC)
เมื่ออ่านเกี่ยวกับ ACL และ RBAC ฉันดูเหมือนจะเข้าใจง่าย - มีชื่อผู้ใช้หรือบทบาทที่ได้รับสิทธิ์เข้าถึงเนื้อหา ฉันยังสามารถดูว่าฉันสามารถใช้สิ่งเหล่านี้ได้อย่างไร เช่นภาพนี้ให้มุมมองที่ชัดเจนของ ACL และ RBAC สำหรับฉัน (ในขณะที่ฉันสามารถไปและออกแบบตารางฐานข้อมูลตามด้านบน): (รูปภาพมารยาทของpressbooks ) สิ่งที่ฉันกำลังดิ้นรนคือเอแบค ภาพต่าง ๆ ที่ฉันพบจนถึงตอนนี้มีลักษณะเป็นคลื่นหรือมีความซับซ้อนมากเกินไปหรือแนะนำให้ใช้บุคคลภายนอกซึ่งเป็นบุคคลที่สามที่ได้รับอนุญาต หรือให้ตัวอย่างคุณสมบัติแปลก ๆ ฉันไม่แน่ใจว่าจะใช้อย่างไร ตัวอย่างการเริ่มต้น ขอผมเริ่มด้วยบางสิ่งในชีวิตจริง สมมติว่าฉันมี บริษัท ที่มีพนักงาน 70-200 คน และสินทรัพย์ของฉันเพื่อป้องกันเป็นเว็บไซต์ที่มีหลายหน้า ฉันต้องการอนุญาตให้บางคนเข้าถึงเนื้อหาบางอย่าง ตัวอย่างเช่นฉันต้องการให้บุคคลLeslieสามารถเข้าถึงหน้าเว็บที่เรียกว่าPrice Managerและอนุญาตให้เธอจัดการราคาสำหรับTravelกลุ่มราคาในหน้านั้นเท่านั้น แต่ไม่สามารถจัดการราคาสำหรับProductกลุ่มในหน้าเดียวกันได้ ฉันจะใช้สิ่งนี้โดยใช้ ABAC ได้อย่างไร ฉันคิดว่าฉันสามารถกำหนดLeslieคุณลักษณะบางอย่างได้ (แต่มีคุณลักษณะใดบ้างและคุณสมบัติเหล่านี้มีอะไรบ้าง) จากนั้นให้ตารางฐานข้อมูลจัดเก็บข้อมูลเหล่านั้น ฉันสามารถออกแบบเอ็นจิ้นที่ดูที่คุณลักษณะเหล่านั้น (แต่ไม่ได้มองLeslieว่าเป็น "บทบาท" ที่ทำใน RBAC) และตัดสินใจจากที่นั่นว่าจะให้สิทธิ์การเข้าถึงเพจหรือไม่ เครื่องยนต์นั้นมีลักษณะอย่างไร มันง่ายหากบล็อก / …

4
วิธีการส่วนตัวควรใช้เส้นทางสาธารณะในการเข้าถึงข้อมูลส่วนตัวเมื่อใด
วิธีการส่วนตัวควรใช้เส้นทางสาธารณะในการเข้าถึงข้อมูลส่วนตัวเมื่อใด ตัวอย่างเช่นถ้าฉันมีคลาส 'ตัวทวีคูณ' ที่ไม่เปลี่ยนรูปแบบ (มีการประดิษฐ์มาบ้างฉันรู้): class Multiplier { public: Multiplier(int a, int b) : a(a), b(b) { } int getA() const { return a; } int getB() const { return b; } int getProduct() const { /* ??? */ } private: int a, b; }; มีสองวิธีที่ฉันสามารถใช้getProduct: int getProduct() const { …

2
หลักปฏิบัติมาตรฐานสำหรับการควบคุมการเข้าถึง (รูปแบบการออกแบบ)
ฉันกำลังดูที่การออกแบบส่วนต่อประสานของฉันและฉันพยายามที่จะตัดสินใจว่าวิธีใดที่ "ถูกต้อง" ที่สุดในการใช้การควบคุมการเข้าถึงตามบทบาทซึ่งกำหนดไว้userและสิ่งsubjectที่userต้องการเข้าถึง เท่าที่ฉันเห็นฉันมีสามตัวเลือกหลัก (ที่สี่เป็นลูกครึ่งของสามสามและห้าเป็นบิดของสี่): ค้นหาsubjectด้วยรายการสิทธิ์ที่userมี -subject.allowAccess(user.getPermissionSet) ค้นหาuserด้วยรายการสิทธิ์ที่subjectต้องการ -user.hasPermissionTo(subject.getRequiredPermissions()) สอบถามบุคคลที่สามเพื่อค้นหาจุดตัดสิทธิ์ - accessController.doPermissionSetsIntersect(subject.permissionSet, user.getPermissionSet()) ค้นหาทั้งsubject/ userในขณะที่มอบหมาย "การตัดสินใจ" ให้กับบุคคลที่สามชั้น มีuserความพยายามในการเข้าถึงsubjectและโยนข้อผิดพลาดหากไม่ได้รับอนุญาต ฉันกำลังเอนเอียงไปทางตัวเลือกที่สี่ - มีsubjectประกอบด้วยaccessControllerข้อมูลที่โทรไปยังsubject.userMayAccess(User user)มอบหมายการดำเนินการแบบ a la: class Subject { public function display(user) { if(!accessController.doPermissionSetsIntersect(this.permissionSet, user.getPermissionSet())) { display403(); //Or other.. eg, throw an error.. } } } .. แต่เมื่อถามคำถามเพิ่มเติม: accessControllerฟิลด์ควรเป็นคลาสคงที่ .. ควรsubject รู้ว่าต้องใช้การอนุญาตใดเพื่อให้สามารถดูได้ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.