2013-09-20

Redmine上の不要なユーザをどう扱うか

長い間運用していると、メンバーも入れ替わります。新しい環境に移り、アカウント自体が実質無効になっていることもあります。
このあたり、みなさんどういうルール・運用をしているのか、気になるところではありますね。
アカウントの無効化措置については、いくつかパターンがあると思います。
  • パスワードをランダムリセットし、実質ログインできない形でアカウントは有効なままにしておく。
  • ロールを剥奪、プロジェクトのメンバーからアサインをはずす。(アカウント有効・権限のみ取り外す)
  • アカウントを無効化する。
  • アカウントを削除する。

削除 or ロック?


一番強硬そうな、「削除」措置。
チケットの場合、削除すると、データが物理削除される形になります。アカウントも削除すると、やはり物理削除になります。
ですが、実際に試してみたら、影響はそれだけじゃありませんでした。
結論から言いますと、『削除』はしないほうが安全です。現実的な対応方法は、こんな感じ?
  • アカウントをロックする。
  • ロックした上で、そのアカウントのメール通知設定を『通知しない』に設定する。
  • 担当者になる可能性がまず無い場合は、プロジェクトから除籍する。
ロックされただけだと、メンバとしてプロジェクトに参加している場合、担当者プルダウンに表示されてしまいます…。
実質無効なアカウントなのに、うっかり担当者にしていしてしまい、そのチケットが放置されるのは困りますよね。
こちらは、ただいま自作プラグインで、ロックされたメンバは表示しないように調整しています。

また、アクティブなチケットのウォッチャーに入っていて、メール送信設定が有効な場合だと、ロックされていてもメールが送信されてしまいます
ロックの際にメール通知も無効化されるといいのですが、現状そういう仕組みになっていないようです。

ただ、ロック&プロジェクトから除籍の場合、過去にその人が「作成者」「担当者」であったチケットを探そうとしても、チケットの一覧のフィルタ利用時、メンバーのプルダウンに出てきてくれません。ユーザID直接指定でなんとか取り出しはできますが、UI的にも改善してほしいな、と思っているところです。
 

削除がNG な理由


さて、削除がNGな理由。

チケット上は、そのユーザが関わったチケット(作成、注記の追記、Wikiへの記述など全て)が、『匿名ユーザ』として表記されます。ここまでは、想定の範囲かと思いますが、さらに下記の現象が発生します。

チケット本体のレコードのAuthor_id (作成者のId) が、 全て『匿名ユーザのid』 に置き換わります。複数名まとめてユーザを削除すると、それらが全て匿名ユーザ名義のデータになってしまいます。

また、チケット以外にも、そのユーザが作成したニュースやWiki、添付アイル、フォーラムのメッセージが、『匿名ユーザid』に書き換えられてしまいます。
(User.rb –> def remove_references_before_destroyで処理)

プログラムの調整をし、アカウント削除時にテーブルの書き換えを行わないようにした場合、チケットの表示は可能ですが、この場合、作者名がブランクになります。
ですが、こんどは削除済みのユーザIdをチケットの作者として保持し、作者名がブランクになっていた場合は、チケットの更新ができません 。

ほかにもいろいろ影響がありそうですが、ユーザをうっかり「削除」した場合、単純に「ユーザ」テーブルをリストアするだけでは元に戻せない状況になりますので、削除しないのが無難ですね。

一方、プラグインに関しては、また別の話。

Redmineの本体と同じようにユーザを削除するタイミングで関連テーブルのデータを修正する仕組みになっているかどうかは個別ケースです。
少なくとも、わたしの作ったプラグインは、ユーザが削除された時のケアはしていないので、テストの中にユーザが削除された場合どうなるか、というのを組み込む必要があるかもしれませんね….。

こちらの記事を読まれて、『ちょっと違うよ!』『うちはこうしてるよ!』などのご指摘、ご意見などいただけると幸いです。

[更新履歴]

  • 誤字、改行などお見苦しい部分があったので修正しました。
  • プラグインの場合についての記載を追加しました。

1 件のコメント:

  1. 削除をしない方がよいのは同意です!
    ロックしたら中途半端に表示しないで欲しいですね

    返信削除