我有一组范围内的资源。
scope '/:org_name', :as => 'organization' do
resources :users
end
组织有很多用户。
我希望我的路线看起来像这样:
http://www.mysite.com/<organization-name>/users/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
希望有所帮助。