TurboGears –認証と認証
TurboGearsアプリケーションは、ギアボックスツールキットのクイックスタートおよびセットアップアプリオプションによって作成されます。このオプションでは、承認と認証のサポートがデフォルトで有効になっています。auth.pyで宣言されたモデルは、bootstrap.pyで割り当てられた値に従ってセットアップおよび初期化されます。
次のモデルはauth.pyで宣言されています-
ユーザーモデル
Userモデルには、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パッケージの述語モジュールには、述語チェッカーの定義が含まれています。述語は、ユーザーが要求されたソースにアクセスできるようにするために満たす必要がある条件です。このような述語または条件は、より多くの述語で構成されている場合があります。これらは複合述語と呼ばれます。アクションコントローラー、またはコントローラーには、単一または複合の1つの述部しかありません。
ユーザーがログインしていない場合、または適切な権限がない場合、この述語チェッカーは401(HTTP Unauthorized)をスローします。これは、repoze.whoミドルウェアによってキャッチされ、ユーザーがログインできるようにするログインページを表示し、完了したら、ユーザーは適切なページに戻ります。
tg.predicatesモジュールで定義されているさまざまな条件または述語は次のとおりです。
シニア番号 | tg.predicatesモジュールと説明 |
---|---|
1 | All 指定されたすべての述語が満たされているかどうかを確認します |
2 | Any 指定された述語の少なくとも1つが満たされているかどうかを確認してください |
3 | is_user 認証されたユーザーのユーザー名が指定されたものであることを確認してください |
4 | in_group ユーザーが特定のグループに属していることを確認してください。 |
5 | in_all_groups ユーザーが指定されたすべてのグループに属していることを確認してください。 |
6 | in_any_group ユーザーが指定されたグループの少なくとも1つに属していることを確認してください。 |
7 | is_anonymous 現在のユーザーが匿名であることを確認してください。 |
8 | has_permission 現在のユーザーが指定された権限を持っていることを確認してください。 |
9 | has_all_permissions 現在のユーザーに、指定したすべての権限が付与されていることを確認してください。 |
10 | has_any_permission ユーザーが指定された権限の少なくとも1つを持っていることを確認してください。 |
たとえば、述語がある場合、 grant access user belonging to customers group、次に、次の組み込み述語チェッカーを使用できます-
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')