限制对Rails 3中某些模型项的访问

时间:2010-08-09 18:51:25

标签: ruby-on-rails ruby-on-rails-3

我的Post模型包含published?字段,还有一些授权系统在admin?内定义ApplicationController方法。

我想限制对未发布帖子的访问权限,并仅向管理员显示。

我尝试定义范围accessible以仅向用户发布已发布的帖子,但为管理员发送所有帖子。

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

def self.accessible
  admin? ? all : published
end

问题是无法在模型中访问admin?方法。实现我想要的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

# 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

答案 1 :(得分:0)

一种方式,但不那么抽象。

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

Post.published_unless(admin?)