У меня проблема с моим rails-App. Я использую cancan, чтобы скрыть некоторые ссылки от определенных пользователей. У меня нет ошибок, и роль пользователя правильно распознана. Но что бы я ни пытался, моя ссылка никогда не отображается. Может? -Method всегда возвращает true. Это моя способность Класс:Rails 3.1: can? Метод всегда возвращает false
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, рельсы 3.1.0 и ruby 1.8.7.
Я действительно надеюсь, кто-то может понять, что я делаю неправильно.
Заранее благодарен!
'если current_user.role? (: Proff)' не должно это быть 'если current_user.role? (: Prof)'? – tommasop
Нет, я просто назвал Роль, с двумя ffs, потому что у меня есть модель Prof, а также не хотелось конфликтов. Не уверен, что это неудобно. –
- это не пропустить проверку авторизации skip_authorization_check ??? – tommasop