Надо что бы метод вызывался только под админом. Каждый раз я вызывал метод внутри другого метода, на проверку на админа: PHP: <?php namespace MyProject\Controllers; use MyProject\Views\View as View; use MyProject\Models\Admin\Main as Main; use MyProject\Models\Users\UsersAuthService; class AdminController { public $db; public $view; public $user; public $main; public function __construct(View $view) { $this->view = $view; $this->user = UsersAuthService::getUserByToken(); $this->main = new Main(); } private function checkAdminUser() { if (!isset($this->user) || $this->user->user_role !== 'admin') { $this->view->render('/errors/404.php', [], 404); exit; } } public function index() { $this->checkAdminUser(); $mode = $this->main->getStatusTestMode(); $this->view->render('/admin/index.php', ['mode' => $mode[0]]); } public function updateStatusModePay() { $this->checkAdminUser(); $this->main->updateStatusPay($_POST); header('Location: /admin'); exit; } } Решил убрать дублирование, помести вызов метода $this->checkAdminUser(); в конструктор, это нормальный способ, каким ещё можно? PHP: <?php namespace MyProject\Controllers; use MyProject\Views\View as View; use MyProject\Models\Admin\Main as Main; use MyProject\Models\Users\UsersAuthService; class AdminController { public $db; public $view; public $user; public $main; public function __construct(View $view) { $this->view = $view; $this->user = UsersAuthService::getUserByToken(); $this->main = new Main(); $this->checkAdminUser(); } public function checkAdminUser() { if (!isset($this->user) || $this->user->user_role !== 'admin') { $this->view->render('/errors/404.php', [], 404); exit; } } public function index() { $mode = $this->main->getStatusTestMode(); $this->view->render('/admin/index.php', ['mode' => $mode[0]]); } public function updateStatusModePay() { $this->main->updateStatusPay($_POST); header('Location: /admin'); exit; } }
Да, так делается в каждом методе. А вдруг ты захотел, чтобы удаление чего-то там разрешено было только админу, а все остальное для модераторов и т.д. PHP: public function update( int $id ): CommitRepository { if ( ! $this-> access( 'panel.index.view', 'panel.roles.update' ) ) { return $this -> accessDenied(); } if ( ! isXHR() || ! roles() -> isRole( $id ) ) { return $this -> redirect( routerPathByName( 'admin-panel-roles-view' ) ); } $this -> setThreadTitles( 'Список ролей', 'Панель управления' ); $roles = $this -> model( \Admin\Panel\Roles :: class ); try { $roles -> validation(); $this -> model( \Admin\Panel\Roles\Update :: class ) -> update( $id ); } catch ( ViolationsException $e ) { return $this -> customJson( RestApi :: success() -> errorMessages( ...$e -> getErrors() ) ); } return $this -> permissionView( $roles ); } Убери в коде натив header exit, если используешь ooп связку $this->view->render. Используй фасад $this->user->isRole( 'admin' ) $this->user->isNotRole( 'admin' ) вместо нативного $this->user->user_role !== 'admin' дабы разрабы в IDE понимали твой код и для удобства набирали $this->user->i и тут же подсвечивался список методов + выбор и опа, вместо того чтобы ручками вот это !== === "'ололололо" писать