Web2py-access-control

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

Web2py-アクセス制御

認証

ほとんどすべてのアプリケーションは、ユーザーを認証し、権限を設定できる必要があります。 web2pyには、広範囲でカスタマイズ可能なロールベースのアクセス制御 mechanism.web2py が付属しています。 また、CAS、OpenID、OAuth 1.0、LDAP、PAM、X509などのプロトコルもサポートしています。

web2pyには、ロールベースのアクセス制御メカニズム(RBAC)として知られるメカニズムが含まれています。これは、承認されたユーザーへのシステムアクセスを制限するアプローチです。 RBACを実装するweb2pyクラスはAuthと呼ばれます。

以下のスキーマを見てください。

Auth

  • 認証*は、次の表を定義します-
Sr.No Table Name & Description
1

auth_user

ユーザーの名前、メールアドレス、パスワード、ステータスを保存します。

2

auth_group

ユーザーのグループまたはロールを多対多の構造で保存します

3

auth_membership

リンクのユーザーとグループの情報を多対多の構造で保存します

4

auth_permission

テーブルはグループと権限をリンクします。

5

auth_event

他のテーブルの変更と成功したアクセスを記録します

6

auth_cas

中央認証サービスに使用されます

認証のカスタマイズ

Authをカスタマイズするには2つの方法があります。

  • カスタム db.auth_user テーブルを最初から定義するには。

  • web2pyに auth テーブルを定義させます。

    *auth* テーブルを定義する最後の方法を見てみましょう。 *db.py* モデルでは、次の行を置き換えます-
auth.define_tables()

次のコードに置き換えます-

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),
   Field('address','text')
]

auth.define_tables(username = True)

各ユーザーは電話番号、ユーザー名、住所で構成されていると仮定しています。

*auth.settings.extra_fields* は追加フィールドの辞書です。 キーは、追加フィールドを追加する認証テーブルの名前です。 値は追加フィールドのリストです。 ここで、 *phone_numberとaddress* の2つの追加フィールドを追加しました。
*username* は、通常は電子メールフィールドに基づいている認証プロセスに関係しているため、特別な方法で処理する必要があります。 ユーザー名引数を次の行に渡すと、web2pyにユーザー名フィールドが必要であることが通知され、メールフィールドの代わりにログインに使用するようになります。 主キーのように機能します。
auth.define_tables(username = True)

ユーザー名は一意の値として扱われます。 通常の登録フォーム以外で登録が行われる場合があります。 また、新しいユーザーがログインを強制されて登録を完了することもあります。

これは、デフォルトで False に設定され、プロファイルを更新するときに True に設定されるダミーフィールド complete_registration を使用して実行できます。

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),
   comment = "i.e. 123-123-1234"),
   Field('address','text'),
   Field('complete_registration',default = False,update = True,
   writable = False, readable = False)
]

auth.define_tables(username = True)

このシナリオでは、ログイン時に新しいユーザーが登録を完了することを意図している場合があります。

*db.py* では、modelsフォルダに、次のコードを追加できます-
if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
   redirect(URL('default','user/profile'))

これにより、新しいユーザーが要件に従ってプロファイルを編集するように強制されます。

承認

これは、ユーザーに何らかのアクセスを許可したり、何かの許可を与えるプロセスです。

web2pyでは、新しいユーザーが作成または登録されると、そのユーザーを含む新しいグループが作成されます。 新しいユーザーの役割は、通常「「user_ [id]」」と呼ばれます。ここで、idはユーザーの一意のIDです。

新しいグループの作成のデフォルト値は-

auth.settings.create_user_groups = "user_%(id)s"

ユーザー間のグループの作成は、次の方法で無効にできます-

auth.settings.create_user_groups = None

作成、特定のメンバーへのアクセス許可、および許可は、appadminを使用してプログラムで実現することもできます。

実装のいくつかは次のようにリストされています-

Sr.No Command & Usage
1

auth.add_group('role', 'description')

新しく作成されたグループのIDを返します。

2

auth.del_group(group_id)

指定されたIDを持つグループを削除します

3

auth.del_group(auth.id_group('user_7'))

指定されたIDのユーザーグループを削除します。

4

auth.user_group(user_id)

指定されたユーザーに一意に関連付けられたグループのidの値を返します。

5

auth.add_membership(group_id, user_id)

指定されたgroup_idのuser_idの値を返します

6

auth.del_membership(group_id, user_id)

指定されたmember_idのアクセスを取り消します。 指定されたグループのuser_id。

7

auth.has_membership(group_id, user_id, role)

user_idが指定されたグループに属しているかどうかを確認します。

中央認証サービス(CAS)

web2pyは業界標準、つまりクライアント認証サービス–クライアントとサーバーの両方に組み込まれたweb2pyのCASを提供します。 これはサードパーティの認証ツールです。

これは、分散認証用のオープンプロトコルです。 CASの動作は次のとおりです-

  • ユーザーがWebサイトにアクセスすると、プロトコルはユーザーが認証されているかどうかを確認します。
  • ユーザーがアプリケーションに対して認証されていない場合、プロトコルはユーザーがアプリケーションに登録またはログインできるページにリダイレクトします。
  • 登録が完了すると、ユーザーは電子メールを受け取ります。 登録は、ユーザーが電子メールを確認するまで完了しません。
  • 登録に成功すると、ユーザーはキーで認証され、CASアプライアンスで使用されます。
  • このキーは、バックグラウンドで設定されるHTTP要求を介してユーザーの資格情報を取得するために使用されます。