Web2py - Kiểm soát truy cập
Xác thực
Hầu hết mọi ứng dụng đều cần có khả năng xác thực người dùng và đặt quyền. web2py đi kèm với một điều khiển truy cập dựa trên vai trò mở rộng và có thể tùy chỉnhmechanism.web2py. Nó cũng hỗ trợ các giao thức, chẳng hạn như CAS, OpenID, OAuth 1.0, LDAP, PAM, X509 và nhiều giao thức khác.
web2py bao gồm một cơ chế được gọi là cơ chế Kiểm soát Truy cập Dựa trên Vai trò (RBAC), là một cách tiếp cận để hạn chế quyền truy cập hệ thống đối với người dùng được ủy quyền. Lớp web2py triển khai RBAC được gọi là Auth.
Nhìn vào lược đồ dưới đây.
Auth xác định các bảng sau:
Sr.No | Tên & Mô tả Bảng |
---|---|
1 | auth_user lưu trữ tên, địa chỉ email, mật khẩu và trạng thái của người dùng. |
2 | auth_group lưu trữ các nhóm hoặc vai trò cho người dùng trong một cấu trúc nhiều đến nhiều |
3 | auth_membership Lưu trữ thông tin của các liên kết người dùng và nhóm theo cấu trúc nhiều-nhiều |
4 | auth_permission Bảng liên kết các nhóm và quyền. |
5 | auth_event ghi nhật ký thay đổi trong các bảng khác và truy cập thành công |
6 | auth_cas Nó được sử dụng cho Dịch vụ Xác thực Trung tâm |
Tùy chỉnh xác thực
Có hai cách để tùy chỉnh Auth.
Để xác định một tùy chỉnh db.auth_user bàn từ đầu.
Hãy để web2py xác định auth bàn.
Chúng ta hãy xem xét phương pháp cuối cùng để xác định authbàn. bên trongdb.py mô hình, thay thế dòng sau -
auth.define_tables()
Thay thế nó bằng mã sau:
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)
Giả định rằng mỗi người dùng bao gồm số điện thoại, tên người dùng và địa chỉ.
auth.settings.extra_fieldslà một từ điển của các trường phụ. Khóa là tên của bảng xác thực để thêm các trường bổ sung. Giá trị là danh sách các trường bổ sung. Ở đây, chúng tôi đã thêm hai trường bổ sung,phone_number and address.
usernamephải được xử lý theo cách đặc biệt, vì nó tham gia vào quá trình xác thực, vốn thường dựa trên trường email. Bằng cách chuyển đối số tên người dùng đến dòng sau, web2py sẽ thông báo cho web2py rằng chúng tôi muốn trường tên người dùng và chúng tôi muốn sử dụng nó để đăng nhập thay vì trường email. Nó hoạt động giống như một khóa chính.
auth.define_tables(username = True)
Tên người dùng được coi là một giá trị duy nhất. Có thể có trường hợp đăng ký xảy ra ngoài biểu mẫu đăng ký thông thường. Nó cũng xảy ra như vậy, người dùng mới buộc phải đăng nhập để hoàn thành đăng ký của họ.
Điều này có thể được thực hiện bằng cách sử dụng một trường giả, complete_registration được đặt thành False theo mặc định và được đặt thành True khi họ cập nhật hồ sơ của họ.
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)
Tình huống này có thể dự định người dùng mới, khi đăng nhập, hoàn thành đăng ký của họ.
Trong db.py, trong thư mục mô hình, chúng ta có thể thêm mã sau:
if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
redirect(URL('default','user/profile'))
Điều này sẽ buộc người dùng mới phải chỉnh sửa hồ sơ của họ theo yêu cầu.
Ủy quyền
Đó là quá trình cấp một số quyền truy cập hoặc cấp quyền cho một số thứ cho người dùng.
Trong web2py khi người dùng mới được tạo hoặc đăng ký, một nhóm mới sẽ được tạo để chứa người dùng. Vai trò của người dùng mới thường được gọi là“user_[id]” trong đó id là nhận dạng duy nhất của người dùng.
Giá trị mặc định để tạo nhóm mới là -
auth.settings.create_user_groups = "user_%(id)s"
Việc tạo nhóm giữa những người dùng có thể bị vô hiệu hóa bởi -
auth.settings.create_user_groups = None
Việc tạo, cấp quyền truy cập cho các thành viên cụ thể và các quyền có thể đạt được theo chương trình với sự trợ giúp của appadmin.
Một số cách triển khai được liệt kê như sau:
Sr.No | Lệnh & Cách sử dụng |
---|---|
1 | auth.add_group('role', 'description') trả về id của nhóm mới tạo. |
2 | auth.del_group(group_id) Xóa nhóm có id được chỉ định |
3 | auth.del_group(auth.id_group('user_7')) Xóa nhóm người dùng với nhận dạng đã cho. |
4 | auth.user_group(user_id) Trả về giá trị id của nhóm được liên kết duy nhất cho người dùng đã cho. |
5 | auth.add_membership(group_id, user_id) Trả về giá trị của user_id cho group_id đã cho |
6 | auth.del_membership(group_id, user_id) Thu hồi quyền truy cập của member_id đã cho tức là user_id từ nhóm đã cho. |
7 | auth.has_membership(group_id, user_id, role) Kiểm tra xem user_id có thuộc nhóm nhất định hay không. |
Dịch vụ xác thực trung tâm (CAS)
web2py cung cấp một tiêu chuẩn ngành cụ thể là Dịch vụ Xác thực Máy khách - CAS cho cả máy khách và máy chủ web2py được tích hợp sẵn. Nó là một công cụ xác thực của bên thứ ba.
Nó là một giao thức mở để xác thực phân tán. Hoạt động của CAS như sau:
Nếu người dùng truy cập trang web, giao thức sẽ kiểm tra xem người dùng có được xác thực hay không.
Nếu người dùng không được xác thực vào ứng dụng, giao thức sẽ chuyển hướng đến trang nơi người dùng có thể đăng ký hoặc đăng nhập vào ứng dụng.
Nếu đăng ký hoàn tất, người dùng sẽ nhận được một email. Việc đăng ký không hoàn tất cho đến khi và trừ khi người dùng xác minh email.
Sau khi đăng ký thành công, người dùng được xác thực bằng khóa được thiết bị CAS sử dụng.
Khóa được sử dụng để lấy thông tin đăng nhập của người dùng thông qua yêu cầu HTTP, được đặt ở chế độ nền.