2010-08-09 31 views
1

我有Post模型published?字段和一些授权系统,它定义了ApplicationController里面的admin?方法。限制访问Rails中的一些模型项3

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

我试图定义一个范围accessible只发布发布到用户,但所有职位的管理员。

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

def self.accessible 
    admin? ? all : published 
end 

问题是admin?方法不能在模型内部访问。什么是实现我想要的最好方式?

回答

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 
+0

适用于多个用户的应用程序,但我没有任何注册用户,除了我作为管理员。我会寻找更漂亮的解决方案。 – 2010-08-09 19:04:45

0

单向性,但不太抽象。

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

Post.published_unless(admin?)