Project

General

Profile

Backport(バックポート) #2062

コミュニティのメンバー管理画面に戻るためのYes/Noフォームで「いいえ」を選ぶとアクセスエラーになる

Added by Masato Nagasawa over 8 years ago. Updated about 8 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2011-05-06
Due date:
% Done:

100%


Description

現象

  1. 自分が管理者であるコミュニティページ(/community/:id)にアクセスする
  2. メンバー管理ページ(/community/member/manage?id=:id)にアクセスする
  3. メンバー管理画面に戻るためのYes/Noフォームがあるページへ遷移する
    • 副管理者に対する「副管理者から降格」リンクから遷移できるページ (/community/removeSubAdmin/id/1/member_id/2) あるいは、
    • コミュニティメンバーに対する「退会させる」リンクから遷移できるページ (/community/removeSubAdmin/id/1/member_id/2) のどちらでもよい。
  4. メンバー管理画面に戻るための「いいえ」ボタンを押下する
  5. /default/error エラーページへ遷移する

原因

#1004 での 修正 によって、以下のルーティングが指定されており、

community_memberManage:
  url: /community/member/manage
  param: { module: community, action: memberManage }

このルーティングにマッチした上で、クエリストリングとしてパラメータを含めようとする。 /community/member/manage?id=1 のようなURLとなる。

GET method のフォームに対して action 属性値に ?id=xxx の形のクエリストリングが付与されたURLを渡すと、action 属性値のパラメータを無視する実装のUAが多いらしい。 関連記事(「form action クエリ」や「form action querystring」で検索すると記事がいくつか見つかる) [1] [2]

上記のルーティングが定義されていない場合は lib/routing/opSymfonyDefaultRouteCollection.class.php で

    $this->routes['default'] = new opDeprecatedRoute(
      '/:module/:action/*'
    );

のように定義されているルーティングにマッチし、 /community/memberManage/id/123 のようなURLとなり、パラメータが渡っていたため想定通りに動作していた。

修正内容

PC版、携帯版ともに、ルーティングの定義を

community_memberManage:
  url: /community/member/manage
  param: { module: community, action: memberManage }

から、id パラメータを含めた形

community_memberManage:
  url: /community/member/manage/:id
  param: { module: community, action: memberManage }
  requirements: { id: \d+ }

に変更する。

当該のYes/Noフォームにおいて、action 属性値に含まれるクエリストリングを input 要素などを介して渡すことでこの問題を回避することも可能だが、本質的な解決策ではない。

補足

この問題は #1004 での修正における書き換え時のミスだと思われる。

  • id を付加する必要性について
    • community/memberManage アクションは、特定の id のコミュニティのメンバー管理画面を表示するためのアクションである。つまり id を受け取ることを前提としている。
      • lib/action/opCommunityAction.class.php の preExecute() メソッドおよび executeMemberManage($request) を見れば明らかである。
  • ルーティング定義を変更してしまうことによる副作用はないか
    • id を受け取らない community/memberManage の呼び出しは前述のとおり想定されていないため、もしそのようなリンクがあったとしてもエラーページに飛ばされるだけである。
    • community/memberManage アクションを指すURL /community/member/manage (idを含まないURL)が無くなっても問題はないと判断している。

Related issues

Related to OpenPNE 3 - Bug(バグ) #2058: コミュニティのメンバー管理画面に戻るためのYes/Noフォームで「いいえ」を選ぶとアクセスエラーになる Fixed(完了) 2011-05-06

Associated revisions

Revision d75a66eb (diff)
Added by Masato Nagasawa over 8 years ago

fixed moved get parameter to input tag (fixes #2062 BP from #2058)

Revision baee22e0 (diff)
Added by Minoru Takai about 8 years ago

Revert "fixed moved get parameter to input tag (fixes #2062 BP from #2058)"

This reverts commit d75a66ebbe5abe661da5685a827b47404fc1837f.

Revision 73872e3b (diff)
Added by Minoru Takai about 8 years ago

(fixed #2062, BP from #2058) redefined routing url of @community_memberManage to contain id parameter into url.

Revision db20a1c4 (diff)
Added by Masato Nagasawa about 8 years ago

fixed moved get parameter to input tag (fixes #2062 BP from #2058)

Revision 24067a09 (diff)
Added by Minoru Takai about 8 years ago

Revert "fixed moved get parameter to input tag (fixes #2062 BP from #2058)"

This reverts commit d75a66ebbe5abe661da5685a827b47404fc1837f.

Revision 674dbc8a (diff)
Added by Minoru Takai about 8 years ago

(fixed #2062, BP from #2058) redefined routing url of @community_memberManage to contain id parameter into url.

History

#1 Updated by Masato Nagasawa over 8 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 d75a66ebbe5abe661da5685a827b47404fc1837f で適用されました。

#2 Updated by Masato Nagasawa over 8 years ago

  • Target version changed from OpenPNE3.6beta9 to OpenPNE 3.6.0

#3 Updated by Masato Nagasawa over 8 years ago

  • Target version changed from OpenPNE 3.6.0 to OpenPNE3.6beta11

#4 Updated by Kousuke Ebihara about 8 years ago

  • Target version changed from OpenPNE3.6beta11 to OpenPNE3.6beta12

親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。

#5 Updated by Minoru Takai about 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Accepted(着手)
  • Assignee changed from Masato Nagasawa to Minoru Takai

修正方針を変更する可能性があります。親チケットが完了次第着手します。

#6 Updated by Minoru Takai about 8 years ago

  • Subject changed from コミュニティの副管理者降格画面(/community/removeSubAdmin/id/:id/member_id/:id)で「いいえ」を選ぶとアクセスエラーになる to コミュニティのメンバー管理画面に戻るためのYes/Noフォームで「いいえ」を選ぶとアクセスエラーになる

#7 Updated by Minoru Takai about 8 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)

更新履歴 73872e3bbcbb65e7ffc69572f89233e41d18cdd4 で適用されました。

#8 Updated by Minoru Takai about 8 years ago

更新履歴 baee22e075d151ef84fd7f29b98fc01a4307d5fb で適用されました。

#9 Updated by Naoya Tozuka about 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

新修正方針に基づいた修正を確認しました。問題ありません。

#10 Updated by Minoru Takai about 8 years ago

  • Status changed from Pending Testing(テスト待ち) to Pending Review(レビュー待ち)
  • % Done changed from 70 to 50

更新履歴 674dbc8a2a594c4c56d722620cc2fc4fbad3b086 で適用されました。

#11 Updated by Minoru Takai about 8 years ago

更新履歴 24067a09c41d041389aa95f096a632dd8edebf7f で適用されました。

#12 Updated by Masato Nagasawa about 8 years ago

更新履歴 db20a1c4c3bc0882ebd410da75749265a3497059 で適用されました。

#13 Updated by Kousuke Ebihara about 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

http://redmine.openpne.jp/issues/2062#note-10 のリリースブランチへの取り込みでステータスが「レビュー待ち」に巻き戻ってしまいましたので、もとに戻します。

#14 Updated by Minoru Takai about 8 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

動作テスト

親チケットで示していますが、実装時に動作テストを行っており、この修正内容は原理的に適切であると判断しています。

完了とします。

Also available in: Atom PDF