ロックされた投稿のタイトルをユーザーが編集可能(まだ/再び可能)

このトピックは閉鎖されています:

しかし、当社のインストール環境(Discourse の最新バージョン)では、TL3 以上のユーザーが依然として(再び)これを可能にしています。

TL3 は、ロックされた投稿であっても、OP のタイトル、カテゴリ、タグを変更できます。

管理者が投稿をロックします:

TL3 はロックされた投稿を依然として編集/変更できます:

これは意図された動作ですか(そうであってほしいとは思いません)、それとも古いバグがコードの中で再び這い回っているのでしょうか?

「いいね!」 1

私の読み方が正しければ、少なくともコードの「意図」通り機能しているはずです:

TL3 は、トピックがアーカイブされている場合、またはトピックが PM の場合のみ、編集できません。

この動作を無効にしたい場合は、trusted_users_can_edit_others を変更できると思います。私の知る限り、trusted_users_can_edit_others のデフォルト値は false ではなく、この設定が導入される前の挙動と一貫性を保つためです。

「いいね!」 3

では、投稿をロックする目的は何でしょうか?ないと思います。少なくとも私は見つけられませんでした。つまり、この機能は時代遅れ、不具合がある、あるいは少なくとも混乱を招くものです。

image

テキストには明確に「スタッフメンバーがこの投稿の編集をロックしました」と書かれています。ロックの目的が投稿やトピックの OP(作成者)を編集から保護することとは全く異なるのであれば、このテキストは変更されるべきです。

ロックされた投稿は、高信頼レベルのユーザーが投稿を編集できる設定(一般的には良い設定ですが、ロックされた投稿の場合はもちろん例外)に関わらず、スタッフ以外のユーザーには編集できないはずです。

以下のコードから判断すると、現在の「ロック」機能は、投稿の OP だけがその投稿を編集できなくなることを意味しているようです。TL3 や TL4(およびスタッフ)は、設定で有効になっていれば、ロックされた投稿でも編集可能です。

これでは、ロック機能が極めて限定的なユースケースにしか使えないことになってしまいます。

重要な公式管理者発表を、ある問題のある TL3 ユーザーが「これはミッキーマウスの投稿だ」と書き換え、誤ったタグ付けをしたり、無関係なカテゴリに移動させたりするのを防ぎつつ、一般の TL3/TL4 ユーザーには投稿編集機能を維持したい場合、どうすればよいでしょうか?

「ロック」とは、スタッフ以外には編集不可能であることを意味すべきです。

      def can_edit_topic?(topic)
        return false if Discourse.static_doc_topic_ids.include?(topic.id) && !is_admin?
        return false unless can_see?(topic)

        return true if is_admin?
        return true if is_moderator? && can_create_post?(topic)

        # トピックを作成する権限がないセキュアなカテゴリのトピックは編集できない
        # ただし、カテゴリ未設定のトピックを修正しようとしているが、カテゴリ未設定が無効になっているという極端なケースは除く
        if (
          SiteSetting.allow_uncategorized_topics ||
          topic.category_id != SiteSetting.uncategorized_category_id
        )
          return false if !can_create_topic_on_category?(topic.category)
        end

        # TL4 ユーザーはアーカイブされたトピックを編集できるが、プライベートメッセージは編集できない
        return true if (
          SiteSetting.trusted_users_can_edit_others? &&
          topic.archived &&
          !topic.private_message? &&
          user.has_trust_level?(TrustLevel[4]) &&
          can_create_post?(topic)
        )

        # TL3 ユーザーはアーカイブされたトピックやプライベートメッセージを編集できない
        return true if (
          SiteSetting.trusted_users_can_edit_others? &&
          !topic.archived &&
          !topic.private_message? &&
          user.has_trust_level?(TrustLevel[3]) &&
          can_create_post?(topic)
        )

        return false if topic.archived
        is_my_own?(topic) &&
          !topic.edit_time_limit_expired?(user) &&
          **!Post.where(topic_id: topic.id, post_number: 1).where.not(locked_by_id: nil).exists?**
      end
「いいね!」 2

さらに混乱してきました…

topic guardian は TL3 および TL4 のユーザーがロックされたトピック/投稿(1 番目の投稿)を編集することを許可しますが、post guardian(以下のコード参照)は TL3 および TL4 のユーザーがロックされた非 OP 投稿を編集することを禁止します。

def can_edit_post?(post)
  if Discourse.static_doc_topic_ids.include?(post.topic_id) && !is_admin?
    return false
  end

  return true if is_admin?

  # ロックされた投稿を編集するにはスタッフである必要がある
  return false if post.locked? && !is_staff?

@eviltrout これは意図した動作でしょうか?私見ですが、より論理的(そしてロック機能として価値がある)なのは、topic guardianpost guardian がロック状態を尊重するのと同じように動作することです。前述の通り、TL3 と TL4 がロックされていない投稿を編集できるのは歓迎ですが、ロックされた投稿(最初の投稿を含む)は編集できないようにすべきです。

「いいね!」 1

rspec ファイルを見てみる価値があります。

「いいね!」 1

既に対応済みです。ただ、両方のガーディアンがロック状態をどのように扱っているかを見ると、それ自体が混乱を招きます。

ロック状態の扱い方は、ポストガーディアンが現在行っているようにすべきです。つまり、「ロックされたポストを編集するにはスタッフ権限が必要」という扱いです。

現状では、最初のポスト以外のロックされたポストは本当にロックされており(TL3 以上でも編集・変更不可)、一方、最初のポスト(OP)がロックされていても、実際にはロックされていません(OP 自身以外でも、TL3 以上であれば編集・変更が可能)。これは私には全く理にかなっていないように思えます。特に、TL3 も TL4 もポストやトピックをロックする権限を持っていないからです。

この状況を踏まえると、ロックされた OP についても、ロックされていないポストやトピックの編集を許可する設定に関わらず、TL3 以上のユーザーによる編集が不可能になるよう、本当にロックされるべきだと考えます。

「いいね!」 2

これはバグのように感じます @j.jaffeux – ロックされた投稿はスタッフ以外が編集できるべきではありません。そうでなければ、意味がありません。

「いいね!」 5

@codinghorror ご指摘ありがとうございます。

はい、これはバグです。位置や TL3/TL4 が投稿を編集できる設定に関わらず、両方のガーディアンが投稿をロックすべきです。私はできるだけ詳しく説明しようと努めました。

「いいね!」 1

@eviltrout にこれを割り当ててもらえますか?現在の動作は私には正しくないように思えます。

「いいね!」 1

PR をこちらで開きました

マージされたので、このトピックを閉じます。

「いいね!」 5