Membatasi Akses Via Route CI

mencoba akses ke folder yang tidak tersedia dan menampilkan pesan error 403 karena data yang diinginkan tidak tersedia
avatar hk2903

@hk2903

1 Kontribusi 0 Poin

  • bisa dibentuk pertanyaan dan masalahnya apa lebih jelas? - @hilmanski


Jawaban

Untuk membatasi akses ke folder tertentu pada CodeIgniter, kamu bisa menggunakan fungsi force_download pada CI. Fungsi ini dapat memastikan bahwa pengguna hanya bisa mengakses file yang sudah diizinkan dan memblokir akses ke file yang tidak diizinkan.

contoh:
file .htaccess 
# Block directory browsing
Options -Indexes

# Block access to all files in this directory
Deny from all

file controller yang ingin dibatasi aksesnya:
public function download_file()
{
    $file_path = '/path/to/file'; // ganti dengan path ke file yang diinginkan
    $file_name = 'nama_file.pdf'; // ganti dengan nama file yang diinginkan

    // cek apakah file ada dan dapat diakses
    if (file_exists($file_path) && is_readable($file_path)) {
        // set headers untuk force download
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . $file_name . '"');
        header('Content-Length: ' . filesize($file_path));

        // baca file dan kirimkan isinya ke output
        readfile($file_path);
    } else {
        // jika file tidak ditemukan atau tidak dapat diakses
        show_error('Data yang diinginkan tidak tersedia', 403);
    }
}

Pada contoh kode di atas, jika file yang diinginkan ada dan dapat diakses, maka file akan didownload secara otomatis menggunakan fungsi readfile(). Namun, jika file tidak ditemukan atau tidak dapat diakses, maka akan ditampilkan pesan error 403 menggunakan fungsi show_error(). Kamu juga bisa menyesuaikan pesan error yang ingin ditampilkan.

Semoga membantu!
avatar yukari06

@yukari06

126 Kontribusi 60 Poin


Untuk membatasi akses ke folder atau halaman tertentu dalam CodeIgniter, Anda dapat menggunakan fitur routing dan pengecekan otentikasi pengguna. Berikut adalah beberapa langkah yang dapat Anda lakukan:

Buatlah sebuah fungsi pada controller untuk menampilkan pesan error 403 jika pengguna mencoba mengakses halaman yang tidak diizinkan.
public function error_403()
{
   $data['title'] = "Access Denied";
   $this->load->view('error_403', $data);
}


Di dalam file routes.php, tentukanlah URL yang ingin dibatasi aksesnya dan arahkan ke fungsi error_403() yang telah dibuat sebelumnya.

$route['restricted_folder'] = 'MyController/error_403';


Di dalam fungsi __construct() pada setiap controller yang ingin Anda batasi aksesnya, lakukan pengecekan otentikasi pengguna. Jika pengguna belum melakukan login atau tidak memiliki akses ke halaman tersebut, arahkan ke halaman error 403 yang telah dibuat.

public function __construct()
{
   parent::__construct();
   $this->load->library('session');

   // check user authentication
   if (!$this->session->userdata('logged_in')) {
      redirect('login');
   }

   // check user access
   $allowed_roles = array('admin', 'editor');
   $user_role = $this->session->userdata('role');
   if (!in_array($user_role, $allowed_roles)) {
      redirect('restricted_folder');
   }
}


Dalam contoh di atas, fungsi __construct() melakukan pengecekan terhadap otentikasi pengguna dengan memeriksa apakah pengguna telah melakukan login atau belum. Kemudian, dilakukan pemeriksaan akses pengguna berdasarkan peran pengguna ($user_role). Jika pengguna tidak memiliki akses ke halaman tersebut, maka pengguna akan diarahkan ke halaman error 403 yang telah dibuat sebelumnya.


Anda dapat menyesuaikan kode tersebut sesuai dengan kebutuhan Anda, termasuk pengecekan otentikasi pengguna dan pengecekan akses pengguna.
avatar adamajalah27

@adamajalah27

15 Kontribusi 9 Poin


Login untuk gabung berdiskusi