Rails路由和通过关联限制身份验证

时间:2013-02-12 19:36:54

标签: ruby-on-rails routes

我有一组范围内的资源。

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

组织有很多用户。

我希望我的路线看起来像这样:

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

这目前工作正常。

问题是我可以将'组织名称'部分更改为我想要的任何内容,并且它不会影响任何内容。如果我在其中放置任何字符串,我仍然以该用户身份进行身份验证。

我错过了什么?

1 个答案:

答案 0 :(得分: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

希望有所帮助。