TurboGears – 授權與認證



TurboGears 應用程式是透過 gearbox 工具包的 quickstart 和 setup-app 選項建立的,預設情況下啟用了授權和認證支援。在 auth.py 中宣告的模型根據 bootstrap.py 中分配的值進行設定和初始化。

auth.py 中聲明瞭以下模型:

使用者模型

使用者模型包含 tg_user 表的設計。此表由 repose.who 包使用。此 repose.who 包是一個功能強大且可擴充套件的 WSGI 應用程式身份驗證庫。使用者模型的結構如下:

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)

此組模型包含 tg_group 表的定義。其定義在 auth.py 中給出,如下所示:

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)

另一個模型許可權也已設定,其中包含許可權定義。

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))

在設定模型時,以下資料將新增到這些表中:

u = model.User()
u.user_name = 'manager'
u.display_name = 'Example manager'
u.email_address = 'manager@somedomain.com'
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 = 'editor@somedomain.com'
u1.password = 'editpass'

model.DBSession.add(u1)

謂詞模型

tg 包中的 predicates 模組包含謂詞檢查器的定義。謂詞是使用者能夠訪問請求的源必須滿足的條件。這樣的謂詞或條件可能由多個謂片語成——這些稱為複合謂詞。操作控制器或控制器可能只有一個謂詞,無論是單一的還是複合的。

如果使用者未登入或沒有適當的許可權,則此謂詞檢查器將丟擲 401(HTTP 未授權),該錯誤由 repoze.who 中介軟體捕獲以顯示登入頁面,允許使用者登入,並在使用者完成操作後將其重定向回正確的頁面。

tg.predicates 模組中定義的不同條件或謂詞為:

序號 tg.predicates 模組和描述
1

所有

檢查是否滿足所有指定的謂詞

2

任何

檢查是否滿足指定的謂詞中的至少一個

3

is_user

檢查已認證使用者的使用者名稱是否為指定使用者名稱

4

in_group

檢查使用者是否屬於特定組。

5

in_all_groups

檢查使用者是否屬於所有指定的組。

6

in_any_group

檢查使用者是否屬於指定的組中的至少一個。

7

is_anonymous

檢查當前使用者是否為匿名使用者。

8

has_permission

檢查當前使用者是否具有指定的許可權。

9

has_all_permissions

檢查當前使用者是否已授予所有指定的許可權。

10

has_any_permission

檢查使用者是否具有指定的許可權中的至少一個。

例如,如果您有一個謂詞,即授予屬於客戶組的使用者訪問許可權,則可以使用以下內建謂詞檢查器:

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

以下謂詞檢查器將授予“root”使用者或任何具有“manage”許可權的使用者訪問許可權:

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

© . All rights reserved.