【发布时间】:2015-09-01 17:26:16
【问题描述】:
我正在尝试在自定义路线上提供一些资源,但通过我的 CanCan gem 被拒绝访问。
带有自定义路由的PlaysController:即将到来的播放
class PlaysController < ApplicationController
load_and_authorize_resource
def upcoming_plays
@plays = Play.where("date_of_play >= ?",Time.now ).order(date_of_play: :desc )
end
#...
end
app/views/plays/upcoming_plays.html.erb
<!-- This displays links to plays/ID for play occurring in the future-->
<div id="show-all-plays">
<% @plays.each do |current_play| %>
<%= render partial: "layouts/play_link" ,
locals: {play: current_play} %>
<% end %>
</div>
config/routes.rb
Rails.application.routes.draw do
get 'plays/upcoming_plays', :as => 'upcoming_plays', :path=>'upcoming_plays'
#...
end
app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
if user != nil and user.role == 'admin'
can :manage, :all
else
can :read, :all
end
end
end
在导航到 /upcoming_plays.html 时收到错误:
You are not authorized to access this page.
它阻止我通过重定向到根页面查看该页面
我不确定 CanCan 是否认为我正在尝试管理/修改 Plays 模型,但我要做的只是从数据库中读取值。有任何想法吗?感谢您的帮助!
编辑: Rokibul Hasan 建议添加
skip_authorize_resource :only => :upcoming_plays
到播放控制器。哪个有效!然而,这似乎是一个黑客。如果我想添加管理员在此页面上编辑内容的功能怎么办?我不希望所有人都可以使用被禁止的操作。似乎这可能是个问题,有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 devise cancan