Как сделать так, чтобы блог мог публиковаться только администратором?

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

Я создал модель блога с миграцией t.boolean :published, :default =>false

и теперь я не знаю, как сделать так, чтобы этот пост в блоге не публиковался по умолчанию и публиковать его мог только администратор. Часть авторизации может быть выполнена с помощью cancan, как насчет модели и контроллера?

Это мой текущий код: models /blog.rb

 class Blog < ActiveRecord::Base
  attr_accessible :title, :content, :user_id, :published
  has_many :comments, :as => :commentable

  def published?
     published
  end
  def published!
     self.published = true
  end
  def unpublished!
     self.published = false
  end
end
  

контроллер / blog_controller.rb #Я использую плагин make_resourceful для обработки вложенных и полиморфных

 class BlogsController < ApplicationController
   make_resourceful do
   actions :all
response_for :create do
   flash[:notice] = "Successfully created article."
      redirect_to blogs_url
    end
response_for :update do
      flash[:notice] = "Successfully updated article."
      redirect_to blogs_url
    end
response_for :destroy do
      flash[:notice] = "Successfully destroyed article."
      redirect_to blogs_url
   end
 end
end
  

Есть идеи, ребята?? или, может быть, полезная ссылка? Спасибо!

Ответ №1:

Я не уверен, что понимаю, чего вы хотите, если вы используете CanCan, то ваш файл authorizations.rb должен содержать то, что могут делать пользователи с правами администратора, и то, что могут делать обычные пользователи.

Смотрите https://github.com/ryanb/cancan/wiki/Defining-Abilities

В зависимости от того, что вы используете для аутентификации, но если это что-то вроде Devise со встроенными помощниками, вы также можете использовать before_filter :authenticate_admin!, :only => [:edit, :update] для тестирования и убедиться, что текущий пользователь является администратором. (Я бы рекомендовал внести в белый список:except вместо:only).

Комментарии:

1. спасибо за ответ.. тогда как отобразить только :published с true для отображения?? что я должен написать в индексе def?

2. я думаю, я нашел плагин, который соответствует моим потребностям.. github.com/mysmallidea/requires-approval