路径安全和before_filters rails

问题描述:

我目前正在创建一个应用程序,用户可以在其中创建和申请作业。然而,由于我是相当新的轨道,我面临着一个相当显著安全特征,如果任何用户知道正确的路径,例如:路径安全和before_filters rails

localhost:3000/users/user_id/apps 

然后,他们可以看到任何用户的任何工作提出的申请!

我相当肯定我需要使用before_filter来检查current_user.id是否匹配在我的作业表中找到的每个作业的user_id或者匹配在我的应用程序表中找到的user_id。

我真的不知道如何构建这个过滤器,或者应用过滤器的位置 - 例如,最好在应用程序控制器中创建过滤器,然后在需要的地方应用一个skip_before_filter实例。

任何帮助的人可以提供有关构建此代码,并将其放在哪里将不胜感激!谢谢:)

你开始寻找授权解决方案,如康康舞之前,一个简单的办法是避免做

App.find params[:id] 

由于某个应用程序相关联的用户,你已经有了CURRENT_USER的设置,你可以做

app = current_user.apps.find params[:id] 

哪个只会查找与用户关联的应用,无论查找哪个参数。

真正可以进入自己的地方就是当你需要一个更复杂的人时可以做什么系统。例如,用户可能能够编辑他们创建的任何作业,但查看(而不编辑)另一组作业。

例如

can :manage, Project, :user.id => user.id 
can :read, Project, :department => user.department 

这将允许用户完全访问他们的任何项目,并在他们的部门

约康康舞另一件事读取访问权限的项目是,而不是散落before_filters或宏你的控制器你在一个地方声明了规则,所以通常更容易看到发生了什么。 cancan wiki上也有更多的信息载入一个railscast。

你是对的before_filter可能是一种溶剂,但它不是最先进的解决方案。即使世界应该是一个railscast,...

http://railscasts.com/episodes/192-authorization-with-cancan/

当您使用康康舞而不是设计您需要创建current_user助手应该返回在当前登录用户的用户对象...