ログイン
編集不可のページディスカッション情報添付ファイル
"ytoku/ReadingMoin"の差分

MMA
8と21のリビジョン間の差分 (その間の編集: 13回)
2010-11-01 00:06:53時点のリビジョン8
サイズ: 2286
編集者: ytoku
コメント:
2011-02-19 21:18:44時点のリビジョン21
サイズ: 0
編集者: ytoku
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 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]`としてグループに属するユーザの一覧を得て、その中にユーザ名が含まれていたときに権限が確定する。

ytoku/ReadingMoin (最終更新日時 2011-05-02 14:45:37 更新者 ytoku)