<?php
namespace App\Filters;
require_once APPPATH . 'Helpers/TokenGenerator.php';
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Config\Services;
use TokenGenerator;
class IsAdmin implements FilterInterface
{
/**
* Do whatever processing this filter needs to do.
* By default it should not return anything during
* normal execution. However, when an abnormal state
* is found, it should return an instance of
* CodeIgniter\HTTP\Response. If it does, script
* execution will end and that Response will be
* sent back to the client, allowing for error pages,
* redirects, etc.
*
* @param RequestInterface $request
* @param array|null $arguments
*
* @return RequestInterface|ResponseInterface|string|void
*/
public function before(RequestInterface $request, $arguments = null)
{
$token = $_COOKIE['token'] ?? null;
if (!$token) {
return Services::response()
->setJSON(['message' => 'Unauthorized - Please log in.'])
->setStatusCode(401);
}
$decoded = TokenGenerator::verify($token);
if (!$decoded) {
return Services::response()
->setJSON(['message' => 'Unauthorized - Invalid token.'])
->setStatusCode(401);
}
if (!isset($decoded['usertype']) || $decoded['usertype'] !== 'admin') {
return Services::response()
->setJSON(['message' => 'Forbidden - You do not have permission to access this resource.'])
->setStatusCode(403);
}
return;
}
/**
* Allows After filters to inspect and modify the response
* object as needed. This method does not allow any way
* to stop execution of other after filters, short of
* throwing an Exception or Error.
*
* @param RequestInterface $request
* @param ResponseInterface $response
* @param array|null $arguments
*
* @return ResponseInterface|void
*/
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
//
}
}