2011-09-05 148 views
1

我试图找出before_filters,我希望得到一些帮助。使用'before_filter'进行身份验证

我有一个简单的博客应用程序,其条目可以是(草稿或发布)和(公共或私人)。我想知道如何才能做我的身份验证?

我目前有:

before_filter :authenticate, :except => [ :show ]

因此,阻止所有的CRUD操作。对于show,我需要检查:

  1. 如果它是草稿,即登录的用户拥有该条目。
  2. 如果其私人,用户登录(在此,所有登录的用户都可以看到私人条目)

我可以行动本身内做到这一点,但它似乎方式这样做,是在before_filter

谢谢!

+1

您可以使用类似[康康舞(https://github.com/ryanb/cancan),这将让你写了一组用于每个条目规则,然后把它们应用到行动。阅读起来会更清晰。 –

+1

感谢米奇,我最终使用了CanCan。我听说过它,但没有意识到它有多深奥。 –

回答

1

在之前的过滤器中执行此操作。如果您正在使用设计,那么当用户登录时,current_user方法可用。否则,用您的authenticate方法返回的值替换current_user。

def find_post 
    @post = Post.find(params[:id]) 
    redirect_to root_path if @post.draft && @post.user != current_user 
    redirect_to root_path if @post.private && !current_user 
end 
+0

把这种类型的逻辑放在模型中是否是一种好的做法?或者将它保存在控制器中,因为它与是否显示操作有关? –