Ограничить доступ к некоторым модельным элементам в Rails 3 - PullRequest
1 голос
/ 09 августа 2010

У меня есть Post модель с полем published? и некоторая система авторизации, которая определяет admin? метод внутри ApplicationController.

Я хочу ограничить доступ к неопубликованным сообщениям и показывать их только администратору.

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

scope :published, where(:published => true)

def self.accessible
  admin? ? all : published
end

Проблема в том, что метод admin? недоступен внутри модели. Каков наилучший способ реализовать то, что я хочу?

Ответы [ 2 ]

2 голосов
/ 09 августа 2010
# option 1
class Post < ActiveRecord::Base
  def self.accessible_to user
    user.admin? ? all : published
  end
end
class PostsController < ApplicationController
  def index
    @posts = post.accessible_to current_user
  end
end

# option 2
class Post < ActiveRecord::Base
  def self.accessible is_admin
    is_admin ? all : published
  end
end
class PostsController < ApplicationController
  def index
    @posts = post.accessible admin?
  end
end
0 голосов
/ 09 августа 2010

В одну сторону, но не так абстрактно.

def self.published_unless(condition)
  condition ? all : published
end

Post.published_unless(admin?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...