Web2py-access-control
Web2py-アクセス制御
認証
ほとんどすべてのアプリケーションは、ユーザーを認証し、権限を設定できる必要があります。 web2pyには、広範囲でカスタマイズ可能なロールベースのアクセス制御 mechanism.web2py が付属しています。 また、CAS、OpenID、OAuth 1.0、LDAP、PAM、X509などのプロトコルもサポートしています。
web2pyには、ロールベースのアクセス制御メカニズム(RBAC)として知られるメカニズムが含まれています。これは、承認されたユーザーへのシステムアクセスを制限するアプローチです。 RBACを実装するweb2pyクラスは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要求を介してユーザーの資格情報を取得するために使用されます。