モック開発停滞

はまったぁ、、、

開発

昨日の続きで Kotti 本体の実装と検証をしていた。

続・プライベートコンテンツの作り方

Kotti サイトの初回起動時のみ実行される populate() の中でルートコンテンツの追加、ACL とデフォルトワークフローの設定が行われている。

Kotti 本体に "contributor" ロールを追加するよっていう話しになったからその実装と検証をしていた。

Kotti 内部で管理している SITE_ACL と repoze.workflow との関連を、私はまだちゃんと理解できていないけど、SITE_ACL は repoze.workflow が扱う workflow.zcml で上書きされるのが仕様のようだ。workflow.zcml の内部では、状態が "public" と "private" でパーミッションを管理している。

そうすると、workflow.zcml で定義されている、ワークフローの状態 "public" な ACL 設定が populate() の初期化処理の中でルートコンテンツに反映される。ルートコンテンツに "contributor" ロールのユーザーがコンテンツを追加できるようにするには "add" パーミッションが必要になる。

ワークフローの状態が "private" なら他ユーザーから見せなくできる、この動作は OK 。ワークフローの状態を "public" に変更すると、"add" パーミッションが付いているため、"contributor" ロールをもつ任意のユーザーが、他のユーザーのプライベートコンテンツ内に任意のコンテンツを追加できてしまう。この動作は NG。

  • ルートコンテンツには任意のユーザーがコンテンツを追加したい
  • ルートコンテンツの子コンテンツはプライベートにしたい

これを同じワークフローでは扱えないので仕方ないかと言う気もするし、ルートコンテンツだけ特別に "add" パーミッションを付けるようにできるなら、そうしても良いかなとも思う。

といった内容を、うまく説明できなくて苦しんでた (> <)