메인 페이지가 있다는 가정하에
www.example.com/admin으로 접속했을 때 아이디가 admin인 관리자만 접속이 가능하도록 해보았다
application/config/routes.php에서
$route['admin'] = 'AdminController/view_users';
추가해준다 view_users.php 뷰 파일 이름이다
모델에 application/models/UserModel.php를 만들고 UserModel 클래스에서 사용자정보를 조회하는 함수를 만든다
class UserModel extends CI_Model {
public function fetchAllUsers() {
$query = $this->db->get('userTable');
return $query->result();
}
}
CI_Model은 코드이그나이터에서 제공하는 기본 모델 클래스로, 데이터베이스 작업과 관련된 도구 제공
public function으로 컨트롤러에서 활용할 수 있도록 해줌
코드이그나이터의 라이브러리 사용해서 userTable에서 모든 사용자 정보 검색
결과는 $query 배열에 저장되고 result();를 사용하여 결과를 배열로 반환
application/controllers/ApiController.php에는 Api컨트롤러에서 사용자 정보를 확인하고 세션에 저장
if ($userInfo) {
$sessionData = array(
'email' => $userInfo->email,
'userId' => $userInfo->userId,
'userName' => $userInfo->userName,
'userRole' => ($userInfo->is_admin == 1) ? 'admin' : 'user'
);
$this->session->set_userdata($sessionData);
$data['response'] = $sessionData;
} else {
$data['response'] = null;
}
echo json_encode($data);
$userInfo 변수는 데이터베이스에서 조회한 사용자의 정보가 있는 변수이다 이변 수가 존재하면 사용자 인증이 성공적으로 이루어졌다고 가정했다
인증에 성공하면 이메일, 유저 아이디, 유저 이름, 유저 롤을 $sessionData 배열에 저장한 후
사용자 역할은 $userInfo->is_admin 값에 따라 결정되고 값이 1이면 admin 1이 아니면 user로 설정
그다음 코드이그나이터의 세션 라이브러리를 사용해 세션 데이터 저장
세션 데이터를 $data[‘response’]에 할당하고 클라이언트에 전송할 응답 데이터이다
클라이언트는 사용자의 세션 정보를 확인할 수 있게 됨
$userInfo가 null이거나 존재하지 않으면 $data[‘respone’]는 null로 설정
최종적으로 echo json_encode($data);를 통해 $data 배열을 JSON 형식의 문자열로 인코딩 후 사용자에게 출력
application/controllers/AdminController에는
private function redirectNonAdmins() {
if (!$this->session->userdata('userRole') || $this->session->userdata('userRole') !== 'admin') {
redirect('mainPage');
}
}
세션을 확인하여 사용자가 관리자 권한이 없을 경우 메인 페이지로 리다이렉션함