我想将“MyController
”映射到User
模型
#ability
class Ability
include CanCan::Ability
def initialize user
user ||= User.new
if user.has_role? :admin
can :manage, :all
else
can :read, :all
can :read, User do |u|
u && u.user_id == user.id
end
end
end
end
#routes
get 'my_controller/show/(:id)', to: 'MyController#show'
#controller
class MyController < ApplicationController
# load_and_authorize_resource
def show
# showing a user
end
end
因此,只有my_controller/show/(:id)
和admin
才能访问current user
。例如,拥有id == 2
的用户可以看到自己的个人资料my_controller/show/2
,而my_controller/show/1234
则不能看到其他用户的个人资料,除非他们是admin
。
项目中没有My
模型。理想情况下,我必须将MyController
重命名为UserController
,但出于某种原因我不允许这样做。
如果我在load_and_authorize_resource
取消注释MyController
,则会出现错误
NameError in MyController#show
uninitialized constant My
那我怎么能摆脱它?
答案 0 :(得分:2)
您可以指定要加载和授权的资源类型的名称:
load_and_authorize_resource :user
否则cancan将尝试按惯例(基于控制器的名称)进行解决。
https://github.com/ryanb/cancan/wiki/authorizing-controller-actions