Web2py - การควบคุมการเข้าถึง

การรับรองความถูกต้อง

เกือบทุกแอปพลิเคชันต้องสามารถตรวจสอบสิทธิ์ผู้ใช้และตั้งค่าสิทธิ์ได้ web2py มาพร้อมกับการควบคุมการเข้าถึงตามบทบาทที่กว้างขวางและปรับแต่งได้mechanism.web2py. นอกจากนี้ยังรองรับโปรโตคอลเช่น CAS, OpenID, OAuth 1.0, LDAP, PAM, X509 และอื่น ๆ อีกมากมาย

web2py มีกลไกที่เรียกว่า Role Based Access Control mechanism (RBAC) ซึ่งเป็นแนวทางในการ จำกัด การเข้าถึงระบบสำหรับผู้ใช้ที่ได้รับอนุญาต คลาส web2py ที่ใช้ RBAC เรียกว่า Auth

ดูสคีมาที่ระบุด้านล่าง

Auth กำหนดตารางต่อไปนี้ -

ซีเนียร์ No ชื่อตารางและคำอธิบาย
1

auth_user

จัดเก็บชื่อที่อยู่อีเมลรหัสผ่านและสถานะของผู้ใช้

2

auth_group

จัดเก็บกลุ่มหรือบทบาทสำหรับผู้ใช้ในโครงสร้างแบบกลุ่มต่อกลุ่ม

3

auth_membership

จัดเก็บข้อมูลของผู้ใช้ลิงก์และกลุ่มในโครงสร้างแบบกลุ่มต่อกลุ่ม

4

auth_permission

ตารางเชื่อมโยงกลุ่มและสิทธิ์

5

auth_event

บันทึกการเปลี่ยนแปลงในตารางอื่นและการเข้าถึงสำเร็จ

6

auth_cas

ใช้สำหรับ Central Authentication Service

การปรับแต่ง Auth

มีสองวิธีในการปรับแต่ง Auth

  • กำหนดแบบกำหนดเอง db.auth_user ตารางตั้งแต่เริ่มต้น

  • ให้ web2py กำหนด auth ตาราง.

ให้เราดูวิธีสุดท้ายในการกำหนด authตาราง. ในdb.py แทนที่บรรทัดต่อไปนี้ -

auth.define_tables()

แทนที่ด้วยรหัสต่อไปนี้ -

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),
   Field('address','text')
]

auth.define_tables(username = True)

สมมติฐานคือผู้ใช้แต่ละคนประกอบด้วยหมายเลขโทรศัพท์ชื่อผู้ใช้และที่อยู่

auth.settings.extra_fieldsเป็นพจนานุกรมของช่องพิเศษ คีย์คือชื่อของตารางรับรองความถูกต้องที่จะเพิ่มฟิลด์พิเศษ ค่าคือรายการของเขตข้อมูลเพิ่มเติม ที่นี่เราได้เพิ่มฟิลด์พิเศษสองฟิลด์phone_number and address.

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

auth.define_tables(username = True)

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

สามารถทำได้โดยใช้ช่องจำลอง complete_registration ที่ตั้งค่าเป็น False ตามค่าเริ่มต้นและตั้งค่าเป็น True เมื่อพวกเขาอัปเดตโปรไฟล์

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),
   comment = "i.e. 123-123-1234"),
   Field('address','text'),
   Field('complete_registration',default = False,update = True,
   writable = False, readable = False)
]

auth.define_tables(username = True)

สถานการณ์นี้อาจตั้งใจให้ผู้ใช้ใหม่เมื่อเข้าสู่ระบบเพื่อลงทะเบียนให้เสร็จสมบูรณ์

ใน db.pyในโฟลเดอร์โมเดลเราสามารถต่อท้ายรหัสต่อไปนี้ -

if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
   redirect(URL('default','user/profile'))

การดำเนินการนี้จะบังคับให้ผู้ใช้ใหม่แก้ไขโปรไฟล์ของตนตามข้อกำหนด

การอนุญาต

เป็นกระบวนการให้สิทธิ์การเข้าถึงหรือให้สิทธิ์บางอย่างแก่ผู้ใช้

ใน web2py เมื่อสร้างหรือลงทะเบียนผู้ใช้ใหม่กลุ่มใหม่จะถูกสร้างขึ้นเพื่อให้มีผู้ใช้ บทบาทของผู้ใช้ใหม่เรียกตามอัตภาพว่า“user_[id]” โดยที่ id คือการระบุเฉพาะของผู้ใช้

ค่าเริ่มต้นสำหรับการสร้างกลุ่มใหม่คือ -

auth.settings.create_user_groups = "user_%(id)s"

การสร้างกลุ่มระหว่างผู้ใช้สามารถปิดใช้งานได้โดย -

auth.settings.create_user_groups = None

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

การใช้งานบางส่วนมีดังต่อไปนี้ -

ซีเนียร์ No คำสั่งและการใช้งาน
1

auth.add_group('role', 'description')

ส่งคืน id ของกลุ่มที่สร้างขึ้นใหม่

2

auth.del_group(group_id)

ลบกลุ่มที่มีรหัสที่ระบุ

3

auth.del_group(auth.id_group('user_7'))

ลบกลุ่มผู้ใช้ด้วยรหัสประจำตัวที่กำหนด

4

auth.user_group(user_id)

ส่งคืนค่าของ id ของกลุ่มที่เชื่อมโยงโดยไม่ซ้ำกันสำหรับผู้ใช้ที่ระบุ

5

auth.add_membership(group_id, user_id)

ส่งกลับค่าของ user_id สำหรับ group_id ที่ระบุ

6

auth.del_membership(group_id, user_id)

ยกเลิกการเข้าถึง member_id ที่กำหนดเช่น user_id จากกลุ่มที่กำหนด

7

auth.has_membership(group_id, user_id, role)

ตรวจสอบว่า user_id เป็นของกลุ่มที่กำหนดหรือไม่

บริการรับรองความถูกต้องส่วนกลาง (CAS)

web2py มีมาตรฐานอุตสาหกรรมคือ Client Authentication Service - CAS สำหรับทั้งไคลเอนต์และเซิร์ฟเวอร์ในตัว web2py เป็นเครื่องมือตรวจสอบสิทธิ์ของบุคคลที่สาม

เป็นโปรโตคอลแบบเปิดสำหรับการตรวจสอบสิทธิ์แบบกระจาย การทำงานของ CAS มีดังนี้ -

  • หากผู้ใช้เยี่ยมชมเว็บไซต์โปรโตคอลจะตรวจสอบว่าผู้ใช้ได้รับการพิสูจน์ตัวตนหรือไม่

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

  • หากการลงทะเบียนเสร็จสมบูรณ์ผู้ใช้จะได้รับอีเมล การลงทะเบียนจะไม่สมบูรณ์จนกว่าและเว้นแต่ผู้ใช้จะยืนยันอีเมล

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

  • คีย์นี้ใช้เพื่อรับข้อมูลประจำตัวของผู้ใช้ผ่านการร้องขอ HTTP ซึ่งตั้งค่าไว้เบื้องหลัง