2012-07-02 1 views
0

Я создаю программное обеспечение форума. Я хочу, чтобы администраторы и моды могли закрыть определенные темы.Restrict attr_accessible для типов пользователей с Ruby on Rails

Коды дезинфицируются, чтобы показывать только релевантную информацию.

Модель

class User < ActiveRecord::Base 
    attr_accessible :name, :email, :password, :password_confirmation, :bio 
    has_many :topics, dependent: :destroy 
end 

class Topic < ActiveRecord::Base 
    belongs_to :user 
    attr_accessible :name, :last_post_id, :content 
end 

Схема для пользователя: администратора и моды столбцов определяют админ и моды.

create_table "users", :force => true do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at",       :null => false 
    t.datetime "updated_at",       :null => false 
    t.string "password_digest" 
    t.string "remember_token" 
    t.boolean "admin",   :default => false 
    t.text  "bio" 
    t.boolean "mod",    :default => false 
end 

Схема для темы: закрытая колонка определяет закрытое состояние раздела.

create_table "topics", :force => true do |t| 
    t.datetime "created_at",      :null => false 
    t.datetime "updated_at",      :null => false 
    t.integer "forum_id" 
    t.string "name" 
    t.integer "last_post_id" 
    t.integer "views" 
    t.integer "user_id" 
    t.boolean "closed",  :default => false 
    t.text  "content" 
end 

Я неохотно пользователь attr_accessible :closed для ТЕМЫ модели, потому что она будет уязвима для запроса вредоносных PUT (поправьте меня, если я ошибаюсь).

Есть ли способ, с помощью которого приложение Rails может получить доступ и изменить значение столбца closed TOPIC без использования attr_accessible, так что только моды и администраторы могут их редактировать?

ответ

1

Я искал в google и нашел это ascii cast.

В принципе, вы ищете динамическое attr_accessible.

Если вы в настоящее время

class Article < ActiveRecord::Base   
  attr_accessible :name, :content, :closed   
end   

Вы ча использовать динамический attr_accessible как это:

class Article < ActiveRecord::Base   
  attr_accessible :name, :content   
 private   
    def mass_assignment_authorizer   
    super + [:closed]   
  end   
end   

Я надеюсь, что это то, что вы ищете. Обязательно проверьте ссылку, которую я дал вам для полной справки.

Смежные вопросы