我的Post
模型包含published?
字段,还有一些授权系统在admin?
内定义ApplicationController
方法。
我想限制对未发布帖子的访问权限,并仅向管理员显示。
我尝试定义范围accessible
以仅向用户发布已发布的帖子,但为管理员发送所有帖子。
scope :published, where(:published => true)
def self.accessible
admin? ? all : published
end
问题是无法在模型中访问admin?
方法。实现我想要的最佳方式是什么?
答案 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?)