0

範囲指定されたリソースのグループがあります。

scope '/:org_name', :as => 'organization' do
  resources :users
end

組織には多くのユーザーがいます。

私が望むのは、ルートが次のようになることです。

http://www.mysite.com/<organization-name>/users/1

これは現在正常に動作します。

問題は、「組織名」の部分を好きなように変更できることです。それは何にも影響しません。そこに文字列を入れても、そのユーザーとして認証されます。

私は何が欠けていますか?

4

1 に答える 1

1

Deefour が述べたように、これは手動で行う必要があります。ここで説明している問題は、認証ではなく承認です。CanCanのような宝石を見てください。

例を挙げて説明します。ユーザーが特定の組織のメンバーであることを確認する必要があります。これは次のようになります (ログインしているユーザーを表す current_user がある場合):

コントローラ:

class UsersController < ApplicationController
  before_filter :find_organization, :ensure_organization_membership, :only => :show

  def show
    @user = @organization.users.find(params[:id])
  end

  def find_organization
    @organization = Organization.find_by_name(params[:org_name])
  end

  def ensure_organization_membership
    # Make sure the current_user(Logged in user) is a member of the company before showing the user profile
    @organization.include(:users).member_of?(current_user)
  end
end

そしてモデルでは

class Organization
....
  def member_of?(user)
    users.includes?(user)
  end
...
end

それが役立つことを願っています。

于 2013-02-12T21:55:31.253 に答える