我的控制器中有以下两个操作:
function add()
{
if (!empty($this->data))
{
if ($this->Favour->save($this->data))
{
$this->Session->setFlash('Your favour has been saved.');
$this->redirect(array('controller'=>'favours','action'=>'index'));
}
}
}
function edit($id = null)
{
$this->Favour->id = $id;
if (empty($this->data))
{
$this->data = $this->Favour->read();
}
else
{
if ($this->Favour->save($this->data))
{
$this->Session->setFlash('Your favour has been updated.');
$this->redirect(array('controller'=>'favours','action'=>'index'));
}
}
}
1)我希望能够将登录的用户ID添加到添加操作中,以便使用该用户作为其作者ID创建新帖子(他们是该用户的外键)数据库表)。我不确定如何与控制器本身内的字段进行对话。
2)对于编辑操作,我想制作它,以便只有作者可以编辑帖子,例如用户200创建帖子20但用户100无法编辑此帖子,因为他的ID是不是200!我没有为我的应用程序使用ACL,只是简单的身份验证。
我考虑过在动作中做一个简单的if语句,如:
function edit($id = null)
{
$this->Favour->id = $id;
$this->Favour->user_id = $user_id;
if($this->Auth->user('id') != $user_id)
{
$this->Session->setFlash('You do not have permission to edit that favour!');
$this->redirect(array('controller'=>'favours','action'=>'index'));
}
else
{
if (empty($this->data))
{
$this->data = $this->Favour->read();
}
else
{
if ($this->Favour->save($this->data))
{
$this->Session->setFlash('Your favour has been updated.');
$this->redirect(array('controller'=>'favours','action'=>'index'));
}
}
}
这是正确的吗? 但我如何从帮助中获取用户ID?
答案 0 :(得分:2)
function add() {
if (!empty($this->data)) {
$this->data['Favour']['user_id'] = $this->Auth->user('id');
if ($this->Favour->save($this->data)) {
//etc
此代码假定:
add
功能id
id
值
Favours
表中有一个名为user_id
的外键与用户的数据类型id
匹配至于编辑;实现它的几种方式。 我会这样做:
function edit($id) {
$this->Favour->id = $id;
$favour_author = $this->Favour->field('user_id');
// get the user of this post
if($this->Auth->user('id') != $favour_author) {
$this->Session->setFlash('You do not own this post.');
$this->redirect('/someplace');
}
if (empty($this->data)) {
$this->data = $this->Favour->read();
}
// carry on.
答案 1 :(得分:0)
如果您使用Auth Component,则可以在控制器中的$ this-> Auth-> user()中访问登录的用户记录。所以要访问id:$ this-> Auth-> user('id')。如果您编写自己的身份验证,则由您决定。
how to talk to fields within the controller itself.
你是什么意思?