我是新手,无论如何我都不懂康康舞。
我已经读了这个教程,但是不知道如何把它应用到我的情况中。
在cancan wiki中有:
- 一个AdminController
- a roll_logs动作
在能力课上他说:
can :roll, :logs if user.admin?
我不明白:roll和:log符号与控制器和动作有什么关系?
我想做的就是说,如果一个用户是管理员,给他们访问AdminController动作的权限,否则不要,这可能吗?
这是可能的。
声明can :roll, :logs if user.admmin?
表示当调用authorize! :roll, :logs
时,如果用户不是管理员,则抛出未经授权的异常。
所以它与控制器或动作没有任何关系,直到你把它变成这样。
如果你有一个logs_controller,例如一个动作滚动,你可以这样做。
class LogsController < ApplicationController
def roll
authorize! :roll, :logs
# Rest of the roll functionality.
end
所以在你的例子中,你想给admin权限的用户访问所有的admin控制器动作。
你可以这样做。
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
can(:manage, :admin) if user.admin?
end
end
admin_controller.rb
class AdminController < ApplicationController
authorize_resource :class => false
def foo
end
def bar
end
end
这将确保只有管理员可以访问admin_controller的foo和bar操作。
:class => false
语句意味着您没有授权资源,这是我们想要的,因为您没有授权某个帖子或评论。您只是在控制器上授权操作。