当我尝试直接将其放入浏览器时,我有一个使用cakephp3的简单程序:

http:// localhost / sample / users / edit / 82

它直接进入登录页面。 登录后,即使该配置文件不是当前用户登录名,我的代码仍然可以编辑该配置文件。

下面是我的编辑代码

public function edit($id = null)
{
    $user = $this->Users->get($id, [
        'contain' => []
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
        $user = $this->Users->patchEntity($user, $this->request->data);


                if ($this->Users->save($user)) {
                    $this->Flash->success(__('The user has been saved.'));
                    return $this->redirect(['action' => 'index']);
                } else {
                    $this->Flash->error(__('The user could not be saved. Please, try again.'));
                }

    }
    $this->set(compact('user'));
    $this->set('_serialize', ['user']);
}


edit.ctp

<div class="actions columns large-2 medium-3">
<h3><?= __('Actions') ?></h3>
 <ul class="side-nav">
    <li><?= $this->Form->postLink(
            __('Delete'),
            ['action' => 'delete', $user->id],
            ['confirm' => __('Are you sure you want to delete # {0}?', 
  $user->id)]
        )
    ?></li>
    <li><?= $this->Html->link(__('List Users'), ['action' => 'index']) ?>
  </li>
</ul>

    <div class="users form large-10 medium-9 columns">
     <?= $this->Form->create($user) ?>
   <fieldset>
      <legend><?= __('Edit User') ?></legend>
      <?php
          echo $this->Form->input('username');
          echo $this->Form->input('password');
      ?>
    </fieldset>
<?= $this->Form->button(__('Submit')) ?>
  <?= $this->Form->end() ?>
</div>

#1楼 票数:0 已采纳

您必须检查现有用户是否正在尝试更新其个人资料。 你可以做这样的事情。

所有这些都在您的编辑方法之上

public function edit($id = null)
{
  $logged_user_id=$this->Auth->user('id');

  if($logged_user_id==$id){
  $user = $this->Users->get($id, [
        'contain' => []
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
        $user = $this->Users->patchEntity($user, $this->request->data);


                if ($this->Users->save($user)) {
                    $this->Flash->success(__('The user has been saved.'));
                    return $this->redirect(['action' => 'index']);
                } else {
                    $this->Flash->error(__('The user could not be saved. Please, try again.'));
                }

    }
    $this->set(compact('user'));
    $this->set('_serialize', ['user']);
   } else {
                    $this->Flash->error(__('You are not allowed to do this.'));
     }
}

#2楼 票数:0

就我而言,就像ndm所说的,我不使用会话,这就是我所做的(希望它有所帮助):

public function edit($id = null)
{

    if(!is_null($this->Auth->user())): // if the user is logged
      if(is_null($id)) { $id = $this->Auth->user('id'); }
      if($this->Auth->user()['group_id']<>1): // in my case group 1 is for the administrator group, i let them edit profile
        $id = $this->Auth->user('id'); // in this case, if the user is not an administrator, id will always be his "user id"
      endif;      
    endif;

    if ($this->request->is(['patch', 'post', 'put'])) {
        $user = $this->Users->patchEntity($user, $this->request->data);
        if ($this->Users->save($user)) {
            $this->Flash->success(__('The user has been saved.'));

            return $this->redirect(['action' => 'edit', $id]);
        }
        $this->Flash->error(__('The user could not be saved. Please, try again.'));
    }

    $this->set(compact('user'));
    $this->set('_serialize', ['user']);
}

  ask by distromob translate from so

未解决问题?本站智能推荐:

1回复

我来自menu.ctp的img链接消失在view.ctp和login.ctp中

我来自menu.ctp的img链接消失在view.ctp和login.ctp中 这是我的menu.ctp 这是我的default.ctp,我称之为此菜单 但是当我启动登录页面时,此img消失了,当我进入任何页面的视图时... 但是,如果我将<img src="i
3回复

cakephp 3允许用户仅编辑其个人资料

我正在使用cakephp 3创建一个应用程序,我的用户有两个角色,管理员和学生。 管理员可以访问所有内容,学生只需访问他的个人资料 我已经完成了这部分,但我不知道如何限制学生只看他的个人资料而不是所有的个人资料。 例如,如果我用用户3登录这是url http:// localhost:87
2回复

如何在URL中添加用户名而不是cakephp 3中的user_id

我希望我的网址像这样的格式http:// localhost / blog / users / username而不是这个http:// localhost / blog / users / view / 6 我在用户视图index.ctp中有此代码 routes.php文件
1回复

如何仅更改 Cakephp3 输入类型中的选项样式

我有一个下拉菜单,当光标悬停时显示默认颜色。 我认为一个解决方案是为“选项”创建一个数组,如下所示: 我的问题是知道在“某物”的地方放什么。 有人知道这些“选项”数组的正确结构,或其他更改选项的方法:悬停样式?
1回复

在cakephp3中格式化表单元素

我如何对齐表单元素框出现的位置,因为我至少希望每个输入框右对齐,使用相同的字体等。我尝试使用模板,但最终我不知道它在说什么。
1回复

CakePHP 3响应式设计,有什么符号吗?

我从CakePHP 3开始,我看到了新的CSS和响应式设计支持; 我搜索了有关样式利用率的信息,因为我想根据设备宽度放置自定义背景(使用min-width of mq-small,mq-medium,mq-large,mq-xlarge,mq-xxlarge。来自cake css)但是我没找到
1回复

cakephp 3增量记录

我尝试从控制器增加表记录,但失败,我想创建一个添加到购物篮的方法,该方法将插入新产品或更新现有产品的数量。 我也想知道是否有任何书或教程(cakephp网站的教程除外),其中详细介绍了cakephp。 我是cakephp的初学者,似乎很混乱,我们欢迎您提供任何帮助。 调节器 我的
4回复

在CakePHP 3中自定义锚标签

我目前在CakePHP 3应用程序的default.ctp菜单中使用以下语法 现在,如果我尝试使用CakePHP 3语法编写标记,如下所示: 如您所见,没有位置在上面放置标签,并且因为该标志符号从菜单中消失了。 有什么办法可以解决我找不到的吗?