我需要指出正确的方向。我正在编写一个简单的应用程序,用户可以登录并查看其任务列表。我希望应用程序安全。我只能验证用户访问整个站点的程度。显然这不是我想要的。我希望他们只访问自己的帐户。有没有一个好的网站可以阅读这个?我正在学习v2.x。感谢
答案 0 :(得分:1)
我想不到除了这本书以外的任何网站。这就是我实施我的方式。我将记录的用户设置在应用程序控制器的beforeRender回调中。这样它就可以在所有控制器中使用。
然后我在用户控制器中有一个名为dashboard的函数
function dashboard($userId = NULL) {}
如果userId与记录用户中的用户匹配,或者在我的情况下,用户是管理员,则继续,否则重定向用户并发出不允许的消息。
如果您仅使用Auth组件,则所有这些都是如此。如果您也想使用ACL组件,则必须检查是否也允许用户访问该页面。
源头 http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html
答案 1 :(得分:0)
你的问题非常笼统,但这里有一些可能有用的信息。
通过注册表列出和查看数据,您可以访问登录的用户ID。因此,在整个应用程序中,在所有方法中,只需获取与登录用户ID相关的数据。
关于编辑/删除数据,您可能需要根据他们尝试编辑或删除的记录的ID来检查登录用户的ID。
这是我挖出的一些旧的CakePHP 1.3(即NOT 2.x)代码。此方法在我的AppController中,并在用户尝试编辑/删除记录时被调用,以确保该记录属于其用户帐户。
function checkUserID($pUserId) {
// This is called for methods when a user can only access it for their own user account - eg, a user can call 'edit', but only on their own records.
if ($pUserId != $this->Auth->user('id')){
$this->Session->setFlash(__('You are not authorized to access that location', true));
$this->redirect($this->referer());
}
}
为了举例说明如何使用此方法,当用户尝试删除该应用中的评论时,我会执行以下操作:
$commentToDelete = $this->Comment->read(null, $id); // get the comment they are trying to delete
$this->checkUserID($commentToDelete['Comment']['user_id']); // check that it is their own comment
// If they pass the above test, then continue and delete the comment.
// If not, they will have already been redirected by the checkUserID method
如果您有任何问题,请与我们联系。
编辑: 回应尼克的评论:
之前我使用过isAuthorized(),但是在上面给出的例子中看不出它是如何工作的。如果用户删除评论,则必须执行以下操作:
$this->checkUserID($commentToDelete['Comment']['user_id']); // check that it is their own comment
但如果他们要删除一个小部件,那就必须是:
$this->checkUserID($widgetToDelete['Widget']['user_id']); // check that it is their own widget
如果他们正在编辑属于“图库”记录的“照片”记录,那么情况可能会更加复杂,这些记录会保存他们的user_id,因此“照片”记录本身没有' user_id'field。
我无法看到你如何能够在isAuthorized()中优雅地处理这些可能的情况。我错过了什么吗?我想问题是,在isAuthorized()中,您可以获取登录用户的ID,但是如何知道要与哪个ID进行比较,以确保他们正在编辑或删除的记录属于他们? / p>
答案 2 :(得分:0)
我并不是100%肯定你所问的是什么,但据我所知,你需要你的用户才能访问某种与他们的账户相关的控制面板或界面。以下是我要做的事情:
如果您编辑问题并提供有关您要完成的更多信息,我可以举例或进一步解释。