Turbogears-authorization-and-authentication

提供:Dev Guides
移動先:案内検索

TurboGears –認証と認証

TurboGearsアプリケーションは、ギアボックスツールキットのクイックスタートオプションとsetup-appオプションによって作成されます。ギアキットツールキットには、既定で認証と認証のサポートが有効になっています。 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 = '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パッケージの述語モジュールには、述語チェッカーの定義が含まれています。 述語とは、ユーザーが要求されたソースにアクセスできるために満たす必要がある条件です。 このような述語または条件は、より多くの述語で構成されている場合があります。これらは複合述語と呼ばれます。 アクションコントローラー、またはコントローラーには、単一または複合の1つの述語のみがあります。

ユーザーがログインしていない場合、または適切な権限がない場合、この述語チェッカーは401(HTTP Unauthorized)をスローします。これはrepoze.whoミドルウェアによってキャッチされ、ログインページを表示して、ユーザーがログインし、完了したら、ユーザーは適切なページに戻ります。

tg.predicatesモジュールで定義されているさまざまな条件または述語は-

Sr.No. tg.predicates module & Description
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つを持っていることを確認してください。

たとえば、*顧客グループに属するアクセス権を付与する*述語がある場合は、次の組み込み述語チェッカーを使用できます-

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