- 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 = '[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)
谓词模型
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')