サイズ: 2286
コメント:
|
サイズ: 0
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 1: | 行 1: |
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 == [[MoinMoin:Groups2009]]で再構築された。 `request.groups`は`web/contexts.py`の`AuxilaryMixin`から来る。 {{{#!highlight py def groups(self): """ Lazy initialize the groups on the first access """ groups = self.cfg.groups(self) return groups groups = EnvironProxy(groups) }}} 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]`としてグループに属するユーザの一覧を得て、その中にユーザ名が含まれていたときに権限が確定する。 |