2012-03-20 6 views
1

これはコードよりベストプラクティスの問題だと思われます。登録ユーザーが通常のビューのコレクションを使用してデータベースに文書をアップロードして作成できるサイト(RoR3とDevise)がある場合もちろん、ユーザーは最初にサインアップしてサイトにログインする必要があります。文書を作成したら、サイトに登録されていない他の人へのリンクを送信したいと思うかもしれません。セキュリティで保護されたユーザーと同じサイトの訪問者を混在させる

私は、招待された人がドキュメントを閲覧できるがホームページを除いてそのビューの外をナビゲートすることができない場合、「読み取り専用」のビューセットを考えています。 Deviseは、私が見ることができるログインしていない訪問者の概念を持っていないようだし、これを行った人は誰も見つかりませんでした。

答えて

0

これは厄介なことがあります。特に、登録していないユーザーがすべてではなく、いくつかのことをすることができます。私が最近取り組んだ会社のこの問題を解決するために、あなたが言及した招待状を含む2つのアプローチを試みました。

アプリ全体がユーザーの周りを回るので、ユーザーがサイトを訪問したときに、ユーザーのインスタンスが作成されました。ユーザーモデルで署名されたユーザーはデータベースレコードによってバックアップされ、存在しない場合は仮想ユーザーに過ぎず、セミパーシステント状態情報を保存するためにセッションデータを使用しました。

私たちは私たちの見解ではもののトンを包ん最初に私たちが実際のユーザーまたは単にオブジェクトのいずれかに current_userを設定し、それが常に利用可能で、ユーザーのようにquacked、特に registered?方法

含むapplication_controllerで

全部でif current_user.registered?となります。しかし、それはすぐに混乱するようになった。より良いパターン(相違が顕著な場合)は、_sidebar_sidebar_registeredのような部分を作成することで、部分のルート名がユーザーの状態に応じて適切なものになるようにする方法を作成できます。

招待されたユーザーがコンテンツへのアクセスを制限されている招待状の場合、モデルによって裏付けされた招待状モジュールを作成しました。招待者は、システムから電子メールを送信したり、埋め込まれたトークンを含むURLを生成することができます。トークンをテーブルに保存して誰が誰を招待したのか分かりました。私たちのケースでは必要でしたが、トークンを調べることは認証に必要なすべてでした。ユーザーがソート認証されると、セッションに状態が保存され、ユーザー(invited?)のメソッドがユーザーにアクセス権があるかどうかを知らせます。

一般に、登録されたユーザーだけがコントローラのbefore_filtersを使用してアクセスを制御する(編集/削除など)可能性のあるコントローラ全体のアクションがありました。物事は乱雑になっていると主に考えています。

さまざまなレベルのユーザー認証を取得し始めたので、CanCanを検討しました。しかし、私はあなたに話すことができます。これは、あなたが誰が何を見て、何をすることができるかを慎重に分かち切っていなけれ

+0

良いアプローチ。サブドメインまたは名前のスコープを使用して遊んだことはありますか? –

+0

サブドメインはSEOを混乱させるでしょう - 私たちのケースでは、登録されていない訪問者に見られるページは、登録ユーザーと実質的に同じ内容なので、同じURLである必要があります。名前付きスコープ...そんなに多くはありません。最終的に、ユーザーが来た最初のページが見られる前に単純な決定が行われ、保存されました。私たちのケースでは、登録されたユーザーがどのくらいの情報を見ているのか、どんな種類のものを見たのかという問題でした。 –

+0

良い点私はSEOについて考えなかった。単純な作品のような縫い目は再び:)ありがとう –

0

工夫がuser_signed_inをご提供いただきありがとうございますか!メソッドとcurrent_userメソッドを使用して、このようなことを手伝ってください。たとえば、あなたのビューであなたの線に沿って何かを持つことができます:

<% if user_signed_in? %> 
    <%= current_user.username %> 
<% end %> 

など

あなたの権限がより複雑に取得する場合、私はあなたが制限されたセクションの管理を支援するための許可宝石を使用することをお勧めします。いくつかの例はDeclarative Authorzation(私の個人的なお気に入り)とCanCanです。

関連する問題