cakephp 避免登录用户访问其他用户的帐户
Posted
技术标签:
【中文标题】cakephp 避免登录用户访问其他用户的帐户【英文标题】:cakephp avoid logged in users to access other user's account 【发布时间】:2011-03-31 21:10:15 【问题描述】:我正在使用 Cakephp 1.3.7 开发一个网站。一切都很好,我喜欢它,但我只是遇到了一个我不知道如何解决的问题(可能是因为我缺乏知识)。
这是我的问题:
在网站中,有一个典型的“管理我的帐户”区域,用户只有在登录后才能访问该区域。在这个区域中,有一个链接可以调用同一个“用户”控制器中的操作,称为“编辑项目'。因此,当用户转到 edit_items 时,操作会接收用户的 id 作为参数(类似于 domain.com/users/edit_items/45,其中 45 是用户的 id ),并以表格形式显示信息。问题来了,如果我直接去浏览器的地址栏,把那个 45 改成其他任何用户的 ID,那么即使那个用户没有登录,那个其他用户的信息也会显示出来。这显然是一个很大的安全问题。
我一直在尝试避免将用户的 id 作为参数传递,并使用 $this->Auth->User('id') 从 Auth 组件(我正在使用)获取它强>。无论出于何种原因,我都可以将登录用户的信息读入表单中,但是当我尝试保存表单上的更改时,我收到一个错误,好像 save 操作失败了,我有不知道为什么。
还有其他方法可以避免我的问题吗?或者找出为什么 save 返回错误?
谢谢!
编辑
所以问题来自验证,这里是交易:当用户填写表单以创建新项目时,有某些字段,其中一些应用了验证规则。但是,当用户返回编辑项目时,并非所有字段都是可编辑的,只有一些字段是可编辑的。是否有可能,由于在创建项目时需要验证的某些字段在编辑时不可用,从而导致错误?怎么能避免呢?我可以仅更改 edit 操作的验证规则吗?
发生情况的示例:创建项目时,其中一个字段是 item_name,它应用了一些验证。编辑项目时,其名称不能更改,因此不会显示在编辑表单中。我相信这可能是导致错误的原因,可能是因为缺少 item_name?
【问题讨论】:
【参考方案1】:你的方向是正确的 - 当用户需要编辑自己的详细信息时,在 url 上传递 user_id 是个坏主意。
您可以使用以下方法:在实际保存之前保存表单时,您可以将 user_id 传递给发布的数据。像这样的:
if (!empty($this->data))
$this->data['User']['id'] = $this->Auth->user('id');
... //Some extra stuff
if ($this->User->save($this->data))
... //success
else
... //error
这样,登录的用户将始终覆盖它自己的记录。检查您的模型中是否有一些验证规则会导致此错误。
【讨论】:
感谢您的回复。问题在于验证,你是对的,我需要弄清楚为什么 解决了! :) 只需在您不想验证的所有字段的“保存”功能之前添加unset($this->User->validate['field']);
以上是关于cakephp 避免登录用户访问其他用户的帐户的主要内容,如果未能解决你的问题,请参考以下文章