0

我有一组范围资源。

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

一个组织有很多用户。

我想要的是我的路线看起来像这样:

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

这目前工作正常。

问题是我可以将“组织名称”部分更改为我想要的任何内容,并且不会影响任何内容。如果我把任何字符串放在那里,我仍然被认证为那个用户。

我错过了什么?

4

1 回答 1

1

正如 Deefour 提到的,您将需要手动执行此操作。你在这里解释的问题是授权而不是身份验证,看看像CanCan这样的 gem

用一个例子来解释它。您必须确保用户是给定组织的成员。这可能看起来像这样(假设您有一个代表登录用户的 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 回答