TurboGears - Ủy quyền & Xác thực

Ứng dụng TurboGears được tạo bằng cách khởi động nhanh và các tùy chọn ứng dụng của bộ công cụ hộp số, có hỗ trợ ủy quyền và xác thực được bật theo mặc định. Các mô hình được khai báo trong auth.py được thiết lập và khởi tạo theo các giá trị được chỉ định trong bootstrap.py.

Các mô hình sau được khai báo trong auth.py -

Mô hình người dùng

Mô hình Người dùng chứa thiết kế của bảng tg_user. Bảng này được sử dụng bởi gói repose.who. Gói repose.who này là một thư viện xác thực mạnh mẽ cũng như có thể mở rộng cho các ứng dụng WSGI. Cấu trúc của một mô hình người dùng như sau:

class User(DeclarativeBase):

"""
   __tablename__ = 'tg_user'
   
   user_id = Column(Integer, autoincrement = True, primary_key=True)
   user_name = Column(Unicode(16), unique = True, nullable = False)
   email_address = Column(Unicode(255), unique = True,nullable=False)
                                             
   display_name = Column(Unicode(255))
   _password = Column('password', Unicode(128))
   created = Column(DateTime, default = datetime.now)

Mô hình nhóm này chứa bảng tg_group định nghĩa. Định nghĩa của nó được đưa ra trong auth.py như sau:

class Group(DeclarativeBase):
   __tablename__ = 'tg_group'
   
   group_id = Column(Integer, autoincrement = True,primary_key = True)
   group_name = Column(Unicode(16),unique = True,nullable = False)
   display_name = Column(Unicode(255))
   created = Column(DateTime, default = datetime.now)

Một quyền mô hình khác cũng được thiết lập, chứa định nghĩa quyền.

class Permission(DeclarativeBase):
   __tablename__ = 'tg_permission'
   
   permission_id = Column(Integer,autoincrement = True,primary_key = True)
   permission_name = Column(Unicode(63), unique = True, nullable = False)
   description = Column(Unicode(255))

Tại thời điểm thiết lập mô hình, dữ liệu sau được thêm vào các bảng này:

u = model.User()
u.user_name = 'manager'
u.display_name = 'Example manager'
u.email_address = '[email protected]'
u.password = 'managepass'

model.DBSession.add(u)
g = model.Group()
g.group_name = 'managers'
g.display_name = 'Managers Group'
g.users.append(u)

model.DBSession.add(g)
p = model.Permission()
p.permission_name = 'manage'
p.description = 'This permission gives an administrative right'
p.groups.append(g)

model.DBSession.add(p)
u1 = model.User()
u1.user_name = 'editor'
u1.display_name = 'Example editor'
u1.email_address = '[email protected]'
u1.password = 'editpass'

model.DBSession.add(u1)

Mô hình dự đoán

Mô-đun vị từ trong gói tg chứa các định nghĩa cho bộ kiểm tra vị từ. Vị từ là một điều kiện phải được đáp ứng để người dùng có thể truy cập nguồn được yêu cầu. Vị ngữ hoặc điều kiện như vậy có thể được tạo thành từ nhiều vị từ hơn - những vị ngữ đó được gọi là vị từ ghép. Bộ điều khiển hành động, hoặc bộ điều khiển, có thể chỉ có một vị từ, có thể là đơn hoặc ghép.

Nếu người dùng chưa đăng nhập hoặc không có quyền thích hợp, trình kiểm tra vị từ này ném 401 (HTTP Unauthorized), bị phần mềm trung gian repoze.who chặn lại để hiển thị trang đăng nhập cho phép người dùng đăng nhập và chuyển hướng người dùng quay lại trang thích hợp khi họ hoàn tất.

Các điều kiện hoặc vị từ khác nhau được xác định trong mô-đun tg.predicates là:

Sr.No. mô-đun tg.predicates & Mô tả
1

All

Kiểm tra xem tất cả các vị từ được chỉ định có được đáp ứng không

2

Any

Kiểm tra xem ít nhất một trong các vị từ được chỉ định có được đáp ứng hay không

3

is_user

Kiểm tra xem tên người dùng của người dùng đã xác thực có phải là tên người dùng được chỉ định không

4

in_group

Kiểm tra xem người dùng có thuộc nhóm cụ thể hay không.

5

in_all_groups

Kiểm tra xem người dùng có thuộc tất cả các nhóm được chỉ định hay không.

6

in_any_group

Kiểm tra xem người dùng có thuộc ít nhất một trong các nhóm được chỉ định hay không.

7

is_anonymous

Kiểm tra xem người dùng hiện tại có ẩn danh không.

số 8

has_permission

Kiểm tra xem người dùng hiện tại có quyền được chỉ định hay không.

9

has_all_permissions

Kiểm tra xem người dùng hiện tại đã được cấp tất cả các quyền được chỉ định chưa.

10

has_any_permission

Kiểm tra xem người dùng có ít nhất một trong các quyền đã chỉ định.

Ví dụ: nếu bạn có một vị ngữ, là grant access user belonging to customers group, thì bạn có thể sử dụng trình kiểm tra vị từ tích hợp sau:

from tg.predicates import in_group
p in_group(‘customers’)

Trình kiểm tra vị từ sau sẽ cấp quyền truy cập cho người dùng 'root' hoặc bất kỳ ai có quyền 'quản lý' -

from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'), 
   sg = 'Only administrators can remove blog posts')