Skip to content
Snippets Groups Projects
Commit b817f8d4 authored by Andrew Rudenets's avatar Andrew Rudenets
Browse files

Разграничение доступа к обработчикам JS-запросов, vol. 1

parent d6e4dd8b
Branches
Tags
No related merge requests found
Showing
with 32 additions and 29 deletions
<?php defined('SYSPATH') or die('No direct script access.'); <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Admin_Index extends Controller_UserEnvi { class Controller_Admin_Index extends Controller_UserEnvi {
public function action_index() public function action_index()
{ {
......
<?php defined('SYSPATH') or die('No direct script access.'); <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Admin_Index extends Controller_UserEnvi { class Controller_Admin_Index extends Controller_UserEnvi {
public function action_index() public function action_index()
{ {
......
<?php defined('SYSPATH') or die('No direct script access.'); <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Admin_Index extends Controller_UserEnvi { class Controller_Admin_Index extends Controller_UserEnvi {
public function action_index() public function action_index()
{ {
......
<?php defined('SYSPATH') or die('No direct script access.'); <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Admin_Index extends Controller_UserEnvi { class Controller_Admin_Index extends Controller_UserEnvi {
public function action_index() public function action_index()
{ {
......
<?php defined('SYSPATH') or die('No direct script access.'); <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Admin_Index extends Controller_UserEnvi { class Controller_Admin_Index extends Controller_UserEnvi {
public function action_index() public function action_index()
{ {
......
<?php defined('SYSPATH') or die('No direct script access.'); <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Admin_Index extends Controller_UserEnvi { class Controller_Admin_Index extends Controller_UserEnvi {
public function action_index() public function action_index()
{ {
......
<?php defined('SYSPATH') or die('No direct script access.'); <?php defined('SYSPATH') or die('No direct script access.');
class Controller_Teacher_Admin_Index extends Controller_UserEnvi { class Controller_Admin_Index extends Controller_UserEnvi {
public function action_index() public function action_index()
{ {
......
...@@ -4,12 +4,9 @@ class Controller_Handler extends Controller { ...@@ -4,12 +4,9 @@ class Controller_Handler extends Controller {
protected $user, $post, $model; protected $user, $post, $model;
private $access; private $access;
const ACCESS_ADMIN = 0; const ACCESS_USER = 0;
const ACCESS_TEACHER = 1; const ACCESS_GUEST = 1;
const ACCESS_STUDENT = 2; const ACCESS_ANYBODY = 2;
const ACCESS_USER = 3;
const ACCESS_GUEST = 4;
const ACCESS_ANYBODY = 5;
public function before() public function before()
{ {
...@@ -29,11 +26,14 @@ class Controller_Handler extends Controller { ...@@ -29,11 +26,14 @@ class Controller_Handler extends Controller {
$this->user = User::instance()->getInfoAsArray(); $this->user = User::instance()->getInfoAsArray();
} }
// Получаем имя маршрута
$route = Route::name($this->request->route()).':'.$this->request->controller();
// Если запрос не прошел на проверку доступа // Если запрос не прошел на проверку доступа
if(!$this->checkAccessLevel()) if(!$this->checkAccessLevel() || !$this->checkBitmask($this->user['AccRoleMark'], $route))
{ {
// Перенаправляем на ошибку доступа // Перенаправляем на ошибку доступа
throw HTTP_Exception::factory (403, $this->user['Type']); throw HTTP_Exception::factory (403, $route);
} }
} }
...@@ -46,22 +46,19 @@ class Controller_Handler extends Controller { ...@@ -46,22 +46,19 @@ class Controller_Handler extends Controller {
$this->access = (int) $level; $this->access = (int) $level;
} }
protected function checkBitmask($userMark, $route)
{
$sysModel = new Model_System;
$bitmask = $sysModel->getBitmaskForRoute($route);
if(!$bitmask)
return true;
return $bitmask & $userMark != 0;
}
protected function checkAccessLevel() protected function checkAccessLevel()
{ {
switch($this->access) switch($this->access)
{ {
case self::ACCESS_ADMIN:
return User::instance()->isSignedIn() AND $this->user['Type'] == 'admin';
break;
case self::ACCESS_TEACHER:
return User::instance()->isSignedIn() AND $this->user['Type'] == 'teacher';
break;
case self::ACCESS_STUDENT:
return User::instance()->isSignedIn() AND $this->user['Type'] == 'student';
break;
case self::ACCESS_USER: case self::ACCESS_USER:
return User::instance()->isSignedIn(); return User::instance()->isSignedIn();
break; break;
......
...@@ -4,7 +4,7 @@ class Controller_Handler_Map extends Controller_Handler { ...@@ -4,7 +4,7 @@ class Controller_Handler_Map extends Controller_Handler {
public function before() { public function before() {
$this->model = new Model_Teacher_Map; $this->model = new Model_Teacher_Map;
$this->setAccessLevel(self::ACCESS_TEACHER); $this->setAccessLevel(self::ACCESS_USER);
parent::before(); parent::before();
} }
......
...@@ -4,7 +4,7 @@ class Controller_Handler_Rating extends Controller_Handler { ...@@ -4,7 +4,7 @@ class Controller_Handler_Rating extends Controller_Handler {
public function before() { public function before() {
$this->model = new Model_Teacher_Rating; $this->model = new Model_Teacher_Rating;
$this->setAccessLevel(self::ACCESS_TEACHER); $this->setAccessLevel(self::ACCESS_USER);
parent::before(); parent::before();
} }
......
{# empty Twig template #}
{# empty Twig template #}
{# empty Twig template #}
{# empty Twig template #}
{# empty Twig template #}
{# empty Twig template #}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment