我的rails-App有问题。我使用cancan来隐藏某些用户的某些链接。 我没有收到任何错误,并且正确识别了用户的角色。但无论我尝试什么,我的链接永远不会显示。 can?-Method总是返回true。 这是我的能力课程:
class Ability
include CanCan::Ability
def initialize(user)
current_user ||= User.new # guest user (not logged in)
puts "Debug"
if current_user.role?(:Admin)
can :manage, Prof
else
if current_user.role?(:Proff)
can :manage, [Exam, Note, Student,Break,Appointment]
else
if current_user.role?(:Student)
can :update, Appointment
can :show, Exam
end
end
end
end
end
这是我认为的:@exam绝对不是零。我也尝试了考试和考试,没有任何作用。
<% if can? :edit, @exam%>
<%= link_to 'Bearbeiten', edit_exam_path(@exam) %> |
<%= link_to 'Alle Prüfungen', exams_path %>
<% end%>
我不知道,如果这很重要,那就是我的控制器的负责人:
class ExamsController < ApplicationController
before_filter :login_required
skip_authorization_check
...
我的考试模式:
class Exam < ActiveRecord::Base
belongs_to :prof
validates_presence_of :prof_id,:title,:deadline
has_many :examdates, :dependent => :destroy
accepts_nested_attributes_for :examdates,
:allow_destroy => true#, :reject_if => proc {| a| a[:date].blank? }
end
在控制台中我尝试了
Exam.accessible_by(ability)
并得到[]。 我使用的是cancan 1.6.7,rails 3.1.0和ruby 1.8.7。
我真的希望,有人可以弄清楚,我做错了什么。
提前致谢!
答案 0 :(得分:0)
我不确定,但添加
应该会很好load_and_authorize_resource
在控制器中。
这样,@exam
已经在控制器的每个动作中加载和授权
我知道您也可以传递类而不是实例,因此Exam
应该可以工作,但仍然可以尝试我的解决方案。