Допустим, у меня есть модель "Канал" как таковая (курс является логическим атрибутом):
class Channel < ActiveRecord::Base
attr_accessible :title
attr_accessible :course, :title, :as => :administrator
end
Я использую cancan со следующей настройкой способности:
class Ability
include CanCan::Ability
def initialize(user)
if user
if user.administrator
can :manage, Channel
else
can [:read, :create], Channel
can [:update, :destroy], Channel, :course => false
end
end
end
end
Вот моя текущая настройка контроллера:
class ChannelsController < ApplicationController
load_and_authorize_resource
###
def new
end
def create
if @channel.save
redirect_to @channel, :notice => "Successfully created channel."
else
render :action => 'new'
end
end
def edit
end
def update
if @channel.update_attributes(params[:channel])
redirect_to @channel, :notice => "Successfully updated channel."
else
render :action => 'edit'
end
end
###
end
Мне нужен метод cancan load_and_authorize_resource
в моем контроллере, чтобы запретить пользователям без прав администратора обновлять существующий канал, где курс истинен, но мне также нужно прервать загрузку его ресурсов с помощью if / else на основе current_user.administrator
, чтобы установить область действия :as => :administrator
, чтобы администраторы имели доступ к атрибуту курса.
Есть ли разумный способ сделать это?