Авторизация на основе ролей в моем приложении основана на канкане (используя rvm 1.9.2@rails_3_0_9 и AuthLogic):
В тестируемом виде я получаю следующее:
неверное количество аргументов (1 для 0) Извлеченный источник (около строки # 12):
12: %td = link_to 'Edit', edit_session_path(session) if can? :manage, @session
Я должен объяснить, что обычные классы аутентификации для моделей Authlogic, User и User_session заменены в этом приложениис Contact и Contact_sessions.Приведенный выше экземпляр модели сеанса не часть аутентификации здесь.(Думаю, суд сейчас на заседании ...).Это означает, что вы должны сообщить cancan об этом изменении.
Я сбросил настройки по умолчанию в ApplicationController:
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
helper_method :current_ability #:current_contact
def role?(base_role)
ROLES.index(base_role.to_s) <= ROLES.index(role)
end
# = = = = = = = = = = = = logon controls = = = = = = = = = = = = = = = = = = =
private
# Override default assumption by CanCan
# https://github.com/ryanb/cancan/wiki/changing-defaults
# in ApplicationController
def current_ability
@current_ability ||= Ability.new(current_contact)
end
def require_contact
unless current_contact
redirect_to root_url, :notice => "You must be logged in to access this page."
return false
end
end
def current_contact_session
return @current_contact_session if defined?(@current_contact_session)
@current_contact_session = ContactSession.find
end
# return user model
def current_contact
return @current_contact if defined?(@current_contact)
@current_contact = current_contact_session && current_contact_session.record
end
end
Роли и права определены в моем классе способностей, здесь:
class Ability
include CanCan::Ability
# Role Inheritance
# https://github.com/ryanb/cancan/wiki/Role-Based-Authorization
# in Ability#initialize
def initialize
if @contact.role? :visitor
can :read, [Home, Session]
end
if @contact.role? :camper
can :read, [Home, Contact_session, Session]
can :manage, Registration
end
if @contact.role? :admin
can :manage, [Home, Contact_session, Contact, Session]
end
if @contact.role? :superadmin
can :manage, :all
end
end
end
И для чего это стоитНа данный момент я не добавил никакого кода ни к каким другим контроллерам (думая, что я решу, что делать, когда у меня есть возможность - методы, в которых я их хочу).
Есть идеи, что здесь не так?Я предполагаю, что неверное количество аргументов для чего-то вызванного банкой?метод в строке 12 зрения?Я перепробовал десятки альтернатив и породил множество других ошибок, но как только я их исправлю, я вернусь к этой.Будем благодарны за каждое предложение!