使用'before_filter'进行身份验证
问题描述:
我试图找出before_filters
,我希望得到一些帮助。使用'before_filter'进行身份验证
我有一个简单的博客应用程序,其条目可以是(草稿或发布)和(公共或私人)。我想知道如何才能做我的身份验证?
我目前有:
before_filter :authenticate, :except => [ :show ]
因此,阻止所有的CRUD操作。对于show
,我需要检查:
- 如果它是草稿,即登录的用户拥有该条目。
- 如果其私人,用户登录(在此,所有登录的用户都可以看到私人条目)
我可以行动本身内做到这一点,但它似乎轨方式这样做,是在before_filter
。
谢谢!
答
在之前的过滤器中执行此操作。如果您正在使用设计,那么当用户登录时,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
把这种类型的逻辑放在模型中是否是一种好的做法?或者将它保存在控制器中,因为它与是否显示操作有关? –
您可以使用类似[康康舞(https://github.com/ryanb/cancan),这将让你写了一组用于每个条目规则,然后把它们应用到行动。阅读起来会更清晰。 –
感谢米奇,我最终使用了CanCan。我听说过它,但没有意识到它有多深奥。 –