Rails url 项目检查
Rails url project check
我有一个 rails 应用程序,用户可以创建项目。一个用户无法看到其他用户的项目。但是,如果我复制用户 1 创建的项目的 url(例如 `localhost:3000/projects/23/edit)并登录到用户 2 并直接粘贴 url,我仍然可以编辑信息。交叉引用创建项目的用户以仅允许该用户 see/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
您必须设置授权,以便控制允许谁对任何项目执行什么操作。
有几个 gem 可以帮助解决这个问题,我个人会推荐 Pundit。 https://github.com/elabs/pundit
如果项目上有foreign_key(比如owner_id,或user_id),那么你可以
current_user.projects.find(params[:id])
在项目控制器中只获取该用户可访问的现有项目。
我怀疑您的数据库中有一些东西可以识别用户及其与项目的关系。
在 sql 查询中添加了一个 where 子句:projects.user_id = ?
。因此,将向任何没有访问权限的用户抛出异常,并引发 404 not found。
我有一个 rails 应用程序,用户可以创建项目。一个用户无法看到其他用户的项目。但是,如果我复制用户 1 创建的项目的 url(例如 `localhost:3000/projects/23/edit)并登录到用户 2 并直接粘贴 url,我仍然可以编辑信息。交叉引用创建项目的用户以仅允许该用户 see/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
您必须设置授权,以便控制允许谁对任何项目执行什么操作。
有几个 gem 可以帮助解决这个问题,我个人会推荐 Pundit。 https://github.com/elabs/pundit
如果项目上有foreign_key(比如owner_id,或user_id),那么你可以
current_user.projects.find(params[:id])
在项目控制器中只获取该用户可访问的现有项目。
我怀疑您的数据库中有一些东西可以识别用户及其与项目的关系。
在 sql 查询中添加了一个 where 子句:projects.user_id = ?
。因此,将向任何没有访问权限的用户抛出异常,并引发 404 not found。