sanitize configuration 機能追加。

Rails 2.0 になって sanitize メソッドがホワイトリスト方式になったわけですが、これに付加機能としてユーザーのロールごとに使用可能なタグ(および属性)を設定できるようにしました。

例えば、administrators に対してHTMLウィジェットFlashの動画を埋め込めるようにするには、ロールの設定で、

  • 許可するタグ : object,param,embed
  • 許可する属性 : value,type

とすればいいわけです。デフォルトの設定は、 RailsActionView::Base.sanitized_allowed_[tags|attributes] で、これがサイト全体の設定になっています。これに"追加"で、ロールごとに設定できるようにしました。

というわけで、最近始めた iKnow ウィジェットを張ってみます。

しかし、これを貼り付けるにはテクニック(?)が必要で、元のウィジェットのソースでは

<embed src="http://www.iknow.co.jp/widgets/iknow_public_badge.swf"  FlashVars="lang=ja&username=yssk22&color_bg=blue"
...

だったわけで、このまま貼り付けると、FlashVars内の &が & になってしまうわけですが、これだと正しくパラメータが伝わらないようです。で、

<embed src="http://www.iknow.co.jp/widgets/iknow_public_badge.swf?lang=ja&username=yssk22&color_bg=blue"
...

というように、FlashVarsを使わない方法だとどういうわけかうまくいくのでした(Firebugsで見る限り& => &になって返ってきているのでブラウザの挙動のせいだと思う)。

いやこれやりたかっただけに10分程度で実装しました(そのせいで、++migration してしまったけど)。