ytoku/ReadingMoinについて、ここに記述してください。
action一覧: action/__init__.pyのget_names
- requestはweb/contexts.pyから来ているらしい
- 要確認。多分HTTPContextクラスのオブジェクト
- web/request.pyは何?
- werkzeugはsupport/werkzeug/以下にある
session
- requestからは request.session でとれる
- セッションID session.sid でとれる
Groups and ACL
Groups2009で再構築された。
request.groupsはweb/contexts.pyのAuxilaryMixinから来る。
cfg.groupsには関数が登録されており、config/multiconfig.pyでlambda cfg, request: datastruct.WikiGroups(request)がデフォルト値となっている。 これらの組み合わせでrequest.groupsはWikiGroups(request)というオブジェクトを指している。
MoinMoin.auth.*に*Groupと*GroupsBackendがあり、WikiGroupsはバックエンドの実装である。バックエンドは__getitem__にグループ名を与えて呼び出すとGroupオブジェクトを生成する。その際Groupオブジェクトにはバックエンドオブジェクトが渡され、Groupオブジェクトから__iter__メソッドなどを呼び出すときにバックエンドが呼び出される。
権限のチェックはsecurity/__init__.pyのAccessControlList.mayあたりで行われる。mayの引数はリクエスト・ユーザ名・権限名である。 acl変数は_addLineメソッドで構築される配列で、[ ('User', {"read": 0, ...}), ... ]の形式で格納されている。 ユーザがグループに属しているかの判定は、aclの各要素を調べてユーザ/グループ名の入っている左側(entry)がグループバックエンド(groups)の生成するグループ名リストの中にあったときに行われる。 groups[entry]としてグループに属するユーザの一覧を得て、その中にユーザ名が含まれていたときに権限が確定する。