我有一个用户可以创建项目的rails应用程序。一个用户无法看到其他用户的项目。但是,如果我复制用户1创建的项目的URL(例如`localhost:3000 / projects / 23 / edit)并登录到用户2并粘贴直接URL,我仍然可以编辑该信息。交叉引用创建项目的用户只允许该用户查看/编辑param链接页面的最佳方法是什么?
EDIT 在我的项目控制器中,我有:
def index
@projects = Project.where(user_id: current_user)
@default_working_project = current_user.default_working_prodject
unless production.user == current_user
redirect_to dashboard_index_path
end
答案 0 :(得分:2)
如果项目中有foreign_key(如owner_id或user_id),那么你可以做
current_user.projects.find(params[:id])
项目控制器中的仅允许该用户访问现有项目。
我怀疑您的数据库中有一些东西可以识别用户及其与项目的关系。
在sql查询中添加了where子句:projects.user_id = ?
。因此,将向任何无权访问的用户抛出异常,并且将引发未找到的404。
答案 1 :(得分:0)
您必须设置授权,以便控制允许谁对任何项目执行操作。
有几个宝石可以帮助解决这个问题,我个人会推荐Pundit。 https://github.com/elabs/pundit