如何允许用户使用CanCan查看资源的单个实例而不是索引?

时间:2013-08-14 03:31:43

标签: ruby-on-rails devise ruby-on-rails-3.2 ruby-on-rails-4 cancan

我会尝试比标题更清晰。我希望用户能够查看可能位于以下URL的所有单个小部件:

/widgets/2
/widgets/3
/widgets/45

但我不希望用户查看整个索引:

/widgets

我知道我可以在控制器中查看此内容,甚至可以在indexshow的视图中查看,但我正在寻找一种更简单的方法,我可以在Ability.rb中添加此内容文件:

can :read, Widget

当然,这也将允许用户查看索引......

2 个答案:

答案 0 :(得分:1)

  

我希望用户能够查看所有单独的小部件..   但我不希望用户查看整个索引

使用:show,而不是:read

can :show, Widget

:read[:show, :index]的{​​{3}}。

答案 1 :(得分:0)

是否必须与康康人合作?因为如果不是,你可以在控制器上的索引操作之前进行过滤,如下所示:

controller

before_filter :check_user,  :only => [:index]  

def index
  // code
end

def check_user
 if current_user.type==1
  redirect to root_url
 end
end

好吧用cancan怎么样

ability.rb

cannot :manage, Widget

控制器

skip_authorize_resource :only => :show