2012-12-11 20 views
5

Tôi đang sử dụng các tệp Ion Auth mới nhất cùng với phiên bản mới nhất của CodeIgniter 2.CodeIgniter 2 và Ion Auth - chỉnh sửa tài khoản người dùng của riêng

Có chức năng được gọi là edit_user trong tệp Bộ điều khiển auth.php. Chức năng này được giới hạn chỉ sử dụng bởi các thành viên trong nhóm "Quản trị", và bất kỳ thành viên quản trị có thể chỉnh sửa bất kỳ thành viên khác bằng cách sử dụng chức năng thông qua URL này ...

/auth/edit_user/id 

Vấn đề là tôi không' t xem bất kỳ chức năng Bộ điều khiển hoặc Chế độ xem nào cho phép người dùng thông thường (không phải Quản trị viên) chỉnh sửa chi tiết tài khoản của riêng họ.

Đây có phải là chức năng Bộ điều khiển mới mà tôi cần viết (sửa đổi chức năng edit_user?) Hoặc đây là điều mà Ion Auth đã làm chưa? Nếu vậy, làm thế nào?

Đây là cổ phiếu Ion Auth edit_user chức năng chứa trong auth.php điều khiển ...

function edit_user($id) 
{ 
    $this->data['title'] = "Edit User"; 

    if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) 
    { 
     redirect('auth', 'refresh'); 
    } 

    $user = $this->ion_auth->user($id)->row(); 

    //process the phone number 
    if (isset($user->phone) && !empty($user->phone)) 
    { 
     $user->phone = explode('-', $user->phone); 
    } 

    //validate form input 
    $this->form_validation->set_rules('first_name', 'First Name', 'required|xss_clean'); 
    $this->form_validation->set_rules('last_name', 'Last Name', 'required|xss_clean'); 
    $this->form_validation->set_rules('phone1', 'First Part of Phone', 'required|xss_clean|min_length[3]|max_length[3]'); 
    $this->form_validation->set_rules('phone2', 'Second Part of Phone', 'required|xss_clean|min_length[3]|max_length[3]'); 
    $this->form_validation->set_rules('phone3', 'Third Part of Phone', 'required|xss_clean|min_length[4]|max_length[4]'); 
    $this->form_validation->set_rules('company', 'Company Name', 'required|xss_clean'); 

    if (isset($_POST) && !empty($_POST)) 
    { 
     // do we have a valid request? 
     if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) 
     { 
      show_error('This form post did not pass our security checks.'); 
     } 

     $data = array(
      'first_name' => $this->input->post('first_name'), 
      'last_name' => $this->input->post('last_name'), 
      'company' => $this->input->post('company'), 
      'phone'  => $this->input->post('phone1') . '-' . $this->input->post('phone2') . '-' . $this->input->post('phone3'), 
     ); 

     //update the password if it was posted 
     if ($this->input->post('password')) 
     { 
      $this->form_validation->set_rules('password', 'Password', 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); 
      $this->form_validation->set_rules('password_confirm', 'Password Confirmation', 'required'); 

      $data['password'] = $this->input->post('password'); 
     } 

     if ($this->form_validation->run() === TRUE) 
     { 
      $this->ion_auth->update($user->id, $data); 

      //check to see if we are creating the user 
      //redirect them back to the admin page 
      $this->session->set_flashdata('message', "User Saved"); 
      redirect("auth", 'refresh'); 
     } 
    } 

    //display the edit user form 
    $this->data['csrf'] = $this->_get_csrf_nonce(); 

    //set the flash data error message if there is one 
    $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); 

    //pass the user to the view 
    $this->data['user'] = $user; 

    $this->data['first_name'] = array(
     'name' => 'first_name', 
     'id' => 'first_name', 
     'type' => 'text', 
     'value' => $this->form_validation->set_value('first_name', $user->first_name), 
    ); 
    $this->data['last_name'] = array(
     'name' => 'last_name', 
     'id' => 'last_name', 
     'type' => 'text', 
     'value' => $this->form_validation->set_value('last_name', $user->last_name), 
    ); 
    $this->data['company'] = array(
     'name' => 'company', 
     'id' => 'company', 
     'type' => 'text', 
     'value' => $this->form_validation->set_value('company', $user->company), 
    ); 
    $this->data['phone1'] = array(
     'name' => 'phone1', 
     'id' => 'phone1', 
     'type' => 'text', 
     'value' => $this->form_validation->set_value('phone1', $user->phone[0]), 
    ); 
    $this->data['phone2'] = array(
     'name' => 'phone2', 
     'id' => 'phone2', 
     'type' => 'text', 
     'value' => $this->form_validation->set_value('phone2', $user->phone[1]), 
    ); 
    $this->data['phone3'] = array(
     'name' => 'phone3', 
     'id' => 'phone3', 
     'type' => 'text', 
     'value' => $this->form_validation->set_value('phone3', $user->phone[2]), 
    ); 
    $this->data['password'] = array(
     'name' => 'password', 
     'id' => 'password', 
     'type' => 'password' 
    ); 
    $this->data['password_confirm'] = array(
     'name' => 'password_confirm', 
     'id' => 'password_confirm', 
     'type' => 'password' 
    ); 

    $this->load->view('auth/edit_user', $this->data);  
} 

Trả lời

4

Trừ khi tôi thiếu điều gì đó, tôi đã kết thúc sửa đổi chức năng edit_user trong Bộ điều khiển auth.php như sau.

tôi đã thay đổi dòng này mà kiểm tra để thấy rằng người dùng là "chưa đăng nhập" HOẶC "không phải là một admin" trước khi đổ chúng ra ...

if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) 
{ 
    redirect('auth', 'refresh'); 
} 

... vào đây , trong đó kiểm tra để thấy rằng người dùng là "chưa đăng nhập" OR ("không phải là một admin""không phải là người sử dụng") trước khi đổ chúng ra ...

if (!$this->ion_auth->logged_in() || (!$this->ion_auth->is_admin() && !($this->ion_auth->user()->row()->id == $id))) 

Điều này dường như được làm việc ...

  • Admin có thể chỉnh sửa tất cả chiếm
  • Người dùng chỉ có thể chỉnh sửa tài khoản của mình
  • và ai đó chưa đăng nhập, không thể sửa đổi bất kỳ tài khoản.

Sửa: Tuy nhiên, người sử dụng cũng có quyền truy cập vào các "nhóm" thiết lập và chỉ đơn giản là có thể đặt themself vào nhóm "admin". Không tốt.

Nhà phát triển của Ion Auth đề cập đến các tệp mà anh cung cấp làm "ví dụ". Vì vậy, nó là để các nhà phát triển cuối cùng để chỉnh sửa Ion Auth cho phù hợp với nhu cầu của dự án.

Để ngăn người dùng không thể tự đặt mình là "quản trị viên" yêu cầu thay đổi đơn giản đối với tệp xem edit_user.php.

Thẩm tra người dùng đã là một "admin" trước khi tạo các hộp kiểm ...

<?php if ($this->ion_auth->is_admin()): ?> 

    // code that generates Groups checkboxes 

<?php endif ?> 

Sau đó, bạn cũng sẽ cần phải kiểm tra kỹ lưỡng và điều chỉnh khi cần thiết. Ví dụ: sau khi chỉnh sửa tiểu sử người dùng, bạn được chuyển hướng đến chế độ xem auth. Vì người dùng không có quyền xem chế độ xem auth, có lỗi "phải là quản trị viên". Trong tệp điều khiển, bạn sẽ phải thêm logic thích hợp để chuyển hướng người dùng đúng cách khi họ không phải là "quản trị viên".

+1

Cảm ơn bạn đã tự mình trả lời và đăng mã. Tôi đăng nó như một yêu cầu kéo và nó bây giờ đã được sáp nhập vào kho lưu trữ Ion Auth. – tagawa

1

Không Ion Auth không làm điều này như là - đó là trọng lượng khá nhẹ. Nhưng nó không khó để thực hiện và theo đúng hướng của bạn, chỉ cần lấy phương thức edit_user đó và thực hiện kiểm tra quản trị và làm cho người dùng chỉ có thể chỉnh sửa tài khoản của riêng họ, chỉ thay đổi nó để nó chỉ cập nhật chi tiết người dùng cho hiện tại người dùng đã đăng nhập.

Kiểm tra tài liệu xác thực ion, có dấu vết tại đó và quay lại với một số mã nếu bạn gặp bất kỳ sự cố nào.

+0

Không có vấn đề gì ... chỉ cần tìm câu trả lời kết luận. Tôi đã sửa đổi thành công và đăng câu trả lời của mình. Cảm ơn bạn. – Sparky

Các vấn đề liên quan