Ran*_*Ran 12 authorization cancan ruby-on-rails-3
我有一个管理员控制器,我希望只有定义为管理员的用户才能访问该控制器.
我的能力课:
class Ability
include CanCan::Ability
def initialize(user)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的管理控制器:
class AdminController < ApplicationController
load_and_authorize_resource
def index
end
def users_list
end
end
Run Code Online (Sandbox Code Playgroud)
当我尝试访问/admin/users_list(使用管理员用户或没有)时,我收到以下错误:uninitialized constant Admin
我究竟做错了什么?这是限制访问控制器的正确方法吗?
Lar*_*ann 30
这是因为当您使用load_and_authorize_resource时,您的控制器必须由名为Admin的模型支持(因为您的控制器名为AdminController).因此,您需要创建此模型或将load_and_authorize_resource替换为:
authorize_resource:class => false
这导致访问检查是针对您的操作而不是模型.请注意,这会导致通用访问符号,例如:manage和:read停止工作,要求您直接在ability.rb中引用控制器操作:
可以[:index,:users_list],:admin
其中第一个参数是用户可以访问的控制器操作数组,第二个参数是控制器的短名称
您可以将授权放在控制器中
authorize_resource :class => false
Run Code Online (Sandbox Code Playgroud)
要么
authorize_resource :class => :controller
Run Code Online (Sandbox Code Playgroud)
然后更改您的app/models/Ability.rb文件
can :manage, :controller_name
Run Code Online (Sandbox Code Playgroud)
看到这个