cfmgrv4/app/Filters/AuthFilter.php
2024-10-11 22:57:48 +09:00

63 lines
2.3 KiB
PHP

<?php
namespace App\Filters;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter 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 mixed
*/
public function before(RequestInterface $request, $arguments = null)
{
$auth = service('myauth');
// log_message("debug", var_export($arguments, true));
// 로그인 않했으면
if (!$auth->isLoggedIn()) {
$urlStack = session()->get('url_stack') ?? [];
$urlStack[] = current_url() . $request->getUri()->getQuery() ? "?" . $request->getUri()->getQuery() : "";
session()->set('url_stack', $urlStack);
return redirect()->to(URLS['LOGIN'])->with('error', '로그인을하셔야합니다.');
}
//User Role 비교 // 회원 ROLES이 필요ROLE($arguments[0]) 목록에 존재하지 않으면(ACL)
$auth = session()->get(SESSION_NAMES['AUTH']);
$roles = explode(DEFAULTS['DELIMITER_ROLE'], $auth['role']);
if (!isset($auth['role']) || !in_array($arguments[0], $roles)) {
return redirect()->back()->with('error', "회원[{$auth['name']}]님은 접속에 필요한 권한{$arguments[0]}이 없습니다. ");
}
}
/**
* 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 mixed
*/
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
//
}
}