2012-03-19 7 views
0

liststasksで構成されるタスク管理アプリケーションを作成しました。ユーザーは自分のリストとタスクのみを表示できます。ユーザーがlistを好きなように共有する機能を追加したいと思います。 myapp.com/lists/1/23534512345234523か:リソースの秘密URLをレールに生成する

  1. ユーザーは
  2. ユーザーが共有する秘密のURLを受け取り、リストを共有するために、リスト/ショー/からのリンクをクリック:ここで私が達成したいの手順ですなんでも。
  3. シークレットURLは、/ lists/show以外のビューにリダイレクトされます。/lists/secret_showやwhatevにルーティングされる/ lists/1/23534512345234523のようなものです。
  4. そのURLを持つユーザーのみ、そのページの情報を見ることができます。

希望が意味を成しています。私はlistレコードを一意のトークンでlist.tokenに更新しなければならないと思います。そして、私はいくつかは、どのように入ってくるURLを受け取るなければならないだろうと、新たな作用を介して

リスト#が、私はlist.tokenによってリストレコードのために濾過し、secret_shareにルーティング

def secret_share 
... 
end 

をsecret_share。おそらくビューの中で、私は単にURL内のトークンの存在によってビューを制限することができます。

思考?

答えて

0

「秘密のURL」を渡すと、実際のURLにリダイレクトしてはいけません。また、情報漏えいのためのあらゆる機会を作り出すことになります。厳密に代替URLである必要があります。

ルーティングを使用することは、別のコントローラを使用する代わりに良い考えです。あなたのルートでは、これが秘密のURLであることを示すために追加のパラメータを渡したいと思うかもしれません。たとえば、:secret => trueのようなものです。その値は、ユーザが偽造するために提出することができないものです。たとえば、ユーザーパラメータは常に文字列なので、trueを使用するのが安全な代替方法です。

この特別なパラメータは、通常はアクセスできない人がページを閲覧できるように、コントローラのアクセスチェックを無効にすることがあります。また、コントローラにlayoutメソッドを使用して別のレイアウトを表示することもできます。

関連する問題