2012-11-28 34 views
0

我正在處理一些管理功能到我的網站,其中具有管理員權限的用戶可以爲給定的用戶ID打開表單。從這種形式他們可以改變用戶權限,修改用戶密碼或其他方式。防止用戶管理頁面上的密碼覆蓋

但是,當從模型構造表單時,密碼字段會從數據庫中提取散列密碼並填充密碼字段。因此,當管理員保存表單時,散列密碼將被視爲純文本,並因此再次散列,從而覆蓋原始密碼。

我需要的是一些允許管理員用戶更改表單的方法,但只有在密碼被更改的情況下才對密碼進行密碼散列和更新。

我的想法是,構建形式設置密碼爲空:

視圖/用戶/ edit.ctp:

echo $this->Form->input('User.password',array(
     'value' => '', 
     'type' => 'password', 
     'autocomplete' => 'off' 
    ) 
); 

而且具有某種對save檢查跳過密碼;但這是我卡住的地方。

控制器/ userscontroller.php

public function edit($id = null) 
{ 
    $this->User->id = $id; 
    if ($this->request->is('get')) 
    { 
     $this->request->data = $this->User->read(); 
    } else { 
     //Something here???? 
     if ($this->User->save($this->data)) 
     { 
      $this->Session->setFlash('Your user has been updated.'); 
      $this->redirect(array('action' => 'index')); 
     } else 
     { 
      $this->Session->setFlash('Unable to update your user.'); 
     } 
    } 

    $this->set('groups',$this->User->Group->find('list'));//, array('fields' => array('id', 'name')))); 
    $this->set('sites',$this->User->Site->find('list'));//, array('fields' => array('id', 'name')))); 
} 

如何檢查並防止口令時,有沒有變化更新?

決定解決方案

按規定我用了第二種形式是在同一頁上的答案重新使用註冊驗證用戶經歷。當更新站點/組權限時,用戶通過一個表單發送,而通過另一個表單發送密碼。

回答

1

我會構建兩個管理員窗體,一個用於更改權限,另一個用於更新密碼。在您處於此狀態時,更改密碼錶單應該有第二個字段用於驗證更改。

有一些CakePHP插件可以幫助管理用戶和密碼。

+0

是的,我承認我可以做很多解決方法。我對用戶的手動更改進行了驗證,並且現在已開始在管理員表單上工作,因爲這是我從過去僱員繼承的一個網站,我正在努力吸收這些網站。感謝您的建議 – Grambot

+0

www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/也可能有幫助 - 您不一定需要第二種表單/操作。 – mark

1

我總是創建一個專門用於更改密碼的新窗體。您應該用鏈接替換密碼字段以更改密碼。

或者,您可以禁用輸入字段,需要一個按鈕,點擊並使用JavaScript來刪除輸入元素

echo $this->Form->input('User.password',array(
     'value' => '', 
     'type' => 'password', 
     'autocomplete' => 'off', 
     'disabled' => true 
    ) 
); 

jQuery的上disabled屬性,因爲它很容易

$(function(){ 
    $('UsersPassword').click(function(){ 
     $(this).attr('disabled', '0'); 
    }); 
});