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