これは厄介なことがあります。特に、登録していないユーザーがすべてではなく、いくつかのことをすることができます。私が最近取り組んだ会社のこの問題を解決するために、あなたが言及した招待状を含む2つのアプローチを試みました。
アプリ全体がユーザーの周りを回るので、ユーザーがサイトを訪問したときに、ユーザーのインスタンスが作成されました。ユーザーモデルで署名されたユーザーはデータベースレコードによってバックアップされ、存在しない場合は仮想ユーザーに過ぎず、セミパーシステント状態情報を保存するためにセッションデータを使用しました。
私たちは私たちの見解ではもののトンを包ん最初に私たちが実際のユーザーまたは単にオブジェクトのいずれかに
current_user
を設定し、それが常に利用可能で、ユーザーのようにquacked、特に
registered?
方法
含むapplication_controllerで
全部でif current_user.registered?
となります。しかし、それはすぐに混乱するようになった。より良いパターン(相違が顕著な場合)は、_sidebar
と_sidebar_registered
のような部分を作成することで、部分のルート名がユーザーの状態に応じて適切なものになるようにする方法を作成できます。
招待されたユーザーがコンテンツへのアクセスを制限されている招待状の場合、モデルによって裏付けされた招待状モジュールを作成しました。招待者は、システムから電子メールを送信したり、埋め込まれたトークンを含むURLを生成することができます。トークンをテーブルに保存して誰が誰を招待したのか分かりました。私たちのケースでは必要でしたが、トークンを調べることは認証に必要なすべてでした。ユーザーがソート認証されると、セッションに状態が保存され、ユーザー(invited?
)のメソッドがユーザーにアクセス権があるかどうかを知らせます。
一般に、登録されたユーザーだけがコントローラのbefore_filtersを使用してアクセスを制御する(編集/削除など)可能性のあるコントローラ全体のアクションがありました。物事は乱雑になっていると主に考えています。
さまざまなレベルのユーザー認証を取得し始めたので、CanCanを検討しました。しかし、私はあなたに話すことができます。これは、あなたが誰が何を見て、何をすることができるかを慎重に分かち切っていなけれ
良いアプローチ。サブドメインまたは名前のスコープを使用して遊んだことはありますか? –
サブドメインはSEOを混乱させるでしょう - 私たちのケースでは、登録されていない訪問者に見られるページは、登録ユーザーと実質的に同じ内容なので、同じURLである必要があります。名前付きスコープ...そんなに多くはありません。最終的に、ユーザーが来た最初のページが見られる前に単純な決定が行われ、保存されました。私たちのケースでは、登録されたユーザーがどのくらいの情報を見ているのか、どんな種類のものを見たのかという問題でした。 –
良い点私はSEOについて考えなかった。単純な作品のような縫い目は再び:)ありがとう –