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

MMA
8と9のリビジョン間の差分
2010-11-01 00:06:53時点のリビジョン8
サイズ: 2286
編集者: ytoku
コメント:
2010-11-02 23:12:06時点のリビジョン9
サイズ: 2478
編集者: ytoku
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 32: 行 32:

`CompositeGroups`は組み合わせ方が浅い。複数のバックエンドに同じ名前のグループがあったとき、最初のバックエンドのみが処理対象になる。

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.groupsweb/contexts.pyAuxilaryMixinから来る。

   1     def groups(self):
   2         """ Lazy initialize the groups on the first access """
   3         groups = self.cfg.groups(self)
   4         return groups
   5     groups = EnvironProxy(groups)

cfg.groupsには関数が登録されており、config/multiconfig.pyでlambda cfg, request: datastruct.WikiGroups(request)がデフォルト値となっている。 これらの組み合わせでrequest.groupsWikiGroups(request)というオブジェクトを指している。

MoinMoin.auth.**Group*GroupsBackendがあり、WikiGroupsはバックエンドの実装である。バックエンドは__getitem__にグループ名を与えて呼び出すとGroupオブジェクトを生成する。その際Groupオブジェクトにはバックエンドオブジェクトが渡され、Groupオブジェクトから__iter__メソッドなどを呼び出すときにバックエンドが呼び出される。

権限のチェックはsecurity/__init__.pyAccessControlList.mayあたりで行われる。mayの引数はリクエスト・ユーザ名・権限名である。 acl変数は_addLineメソッドで構築される配列で、[ ('User', {"read": 0, ...}), ... ]の形式で格納されている。 ユーザがグループに属しているかの判定は、aclの各要素を調べてユーザ/グループ名の入っている左側(entry)がグループバックエンド(groups)の生成するグループ名リストの中にあったときに行われる。 groups[entry]としてグループに属するユーザの一覧を得て、その中にユーザ名が含まれていたときに権限が確定する。

CompositeGroupsは組み合わせ方が浅い。複数のバックエンドに同じ名前のグループがあったとき、最初のバックエンドのみが処理対象になる。

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