我有一些自定义 rake 路线,我正在尝试使用 CanCan 仅允许当前用户编辑他们自己帐户的页面。我的 URL 示例是 ->url.com/users/4/service/edit
我有一个带有操作的用户控制器:
def services
@user = User.find(params[:id])
@servicable = @user
@services = @servicable.services
@service = Service.new
authorize!(:services, @user || User)
end
问题是每次我进入编辑页面时,我都会被重定向到索引页面。即使我正在尝试编辑自己的服务。
假设我的用户 ID 是4
并且我进入url.com/users/4/services/edit
,我被重新路由到索引页面。如果我尝试使用其他用户 id -> url.com/users/3/services/edit
, users/2/services/edit
, users/63/services/edit
, 等等...
我希望能够访问我自己的编辑页面,而不是其他人。
我的路线是这样的:
resources :users do
resources :services, :defaults => { :servicable => 'user' }
end
编辑:这是我的能力
def initialize(user)
user ||= User.new #guest user
if user.role? :admin
can :manage, :all
can :manage, User
elsif user.role? :business
can [:show, :update], User, :id => user.id
elsif user.role? :resident
can [:show, :update], User, :id => user.id
else
can [:show, :update], User, :id => user.id
end
编辑#2:
这是来自 services_controller
def edit
@service = @servicable.services.find(params[:id])
end
请忽略顶部的路线:我正在使用的正确路线是这样的
resources :users do
member do
get 'services', :path => 'services/edit', :defaults => { :servicable => 'user' }
end
end