- TurboGears 教程
- TurboGears - 首頁
- TurboGears - 概覽
- TurboGears - 環境
- TurboGears - 第一個程式
- TurboGears - 依賴項
- TurboGears - 提供模板
- TurboGears - HTTP 方法
- Genshi 模板語言
- TurboGears - 包含
- TurboGears - JSON 渲染
- TurboGears - URL 層次結構
- TurboGears - Toscawidgets 表單
- TurboGears - 驗證
- TurboGears - 快閃記憶體訊息
- TurboGears - Cookie 和會話
- TurboGears - 快取
- TurboGears - Sqlalchemy
- TurboGears - 建立模型
- TurboGears - CRUD 操作
- TurboGears - 資料網格
- TurboGears - 分頁
- TurboGears - 管理員訪問
- 授權與認證
- TurboGears - 使用 MongoDB
- TurboGears - 腳手架
- TurboGears - 鉤子
- TurboGears - 編寫擴充套件
- TurboGears - 可插拔應用程式
- TurboGears - RESTful 應用程式
- TurboGears - 部署
- TurboGears 有用資源
- TurboGears - 快速指南
- TurboGears - 有用資源
- TurboGears - 討論
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')