diff --git a/db/Structure.sql b/db/Structure.sql index 85f05a4cd2d326edc16522cd7f7a6186e1ac93b4..aed114438dfe54819539c911eb6df8bce583755a 100644 --- a/db/Structure.sql +++ b/db/Structure.sql @@ -513,44 +513,51 @@ CREATE TABLE IF NOT EXISTS `recovery_tokens` ( -- Дамп данных таблицы `user_roles` -- +-- 1 - common +-- 2 - student +-- 4 - teacher +-- 8 - admin +-- 16 - deans INSERT INTO `user_roles` (`ID`, `Type`, `RoleName`, `Mark`) VALUES -(1, 'student', 'Студент', 1), -(2, 'teacher', 'Преподаватель', 2), -(3, 'teacher', 'Преподаватель-Администратор', 4); +(1, 'student', 'Студент', 3), +(2, 'teacher', 'Преподаватель', 5), +(3, 'teacher', 'Преподаватель-Администратор', 13), +(4, 'teacher', 'Работник деканата', 21)// -- -- Дамп данных таблицы `user_roles` -- + + INSERT INTO `page_access` (`ID`, `Pagename`, `Bitmask`) VALUES -(1, 'common:index', 7), -(2, 'common:settings', 7), -(3, 'common:profile', 7), -(4, 'teacher:index', 6), -(5, 'teacher:settings', 6), -(6, 'teacher:map:create', 6), -(7, 'teacher:map:edit', 6), -(8, 'teacher:rating', 6), -(9, 'teacher:profile', 6), -(10, 'admin:common', 4), -(11, 'student:index', 1), -(12, 'student:settings', 1), -(13, 'student:subject', 1), -(14, 'teacher:map:discipline', 6), -(15, 'teacher:map:structure', 6), -(16, 'teacher:map:groups', 6), -(17, 'teacher:map:students', 6), -(18, 'teacher:map:teachers', 6), -(19, 'handler:AdmAccounts', 4), -(20, 'handler:AdmStudents', 4), -(21, 'handler:AdmTeachers', 4), -(22, 'handler:GetHelp', 7), -(23, 'handler:Map', 6), -(24, 'handler:Rating', 6), -(25, 'handler:Settings', 7), -(26, 'teacher:exam', 6), -(27, 'dean_office:index', 7); --- TODO: restrict dean's +(1, 'common:index', 1), +(2, 'common:settings', 1), +(3, 'common:profile', 1), +(4, 'teacher:index', 4), +(5, 'teacher:settings', 4), +(6, 'teacher:map:create', 4), +(7, 'teacher:map:edit', 4), +(8, 'teacher:rating', 4), +(9, 'teacher:profile', 4), +(10, 'admin:common', 8), +(11, 'student:index', 2), +(12, 'student:settings', 2), +(13, 'student:subject', 2), +(14, 'teacher:map:discipline', 4), +(15, 'teacher:map:structure', 4), +(16, 'teacher:map:groups', 4), +(17, 'teacher:map:students', 4), +(18, 'teacher:map:teachers', 4), +(19, 'handler:AdmAccounts', 8), +(20, 'handler:AdmStudents', 8), +(21, 'handler:AdmTeachers', 8), +(22, 'handler:GetHelp', 1), +(23, 'handler:Map', 2), +(24, 'handler:Rating', 2), +(25, 'handler:Settings', 1), +(26, 'teacher:exam', 2), +(27, 'dean_office:index', 24)// INSERT INTO `general_settings` (`ID`, `Val`, `ValS`) VALUES diff --git a/db/fix.sql b/db/fix.sql index 411c469c89912d074a545e53be238785671a0b3d..4ec1033285d15f567f3c89932269680868aebf44 100644 --- a/db/fix.sql +++ b/db/fix.sql @@ -1,7 +1,48 @@ -DELIMITER // +DELETE FROM `page_access`; + +UPDATE `user_roles` SET user_roles.Mark = 13 WHERE user_roles.RoleName LIKE 'Преподаватель-Администратор'; +UPDATE `user_roles` SET user_roles.Mark = 21 WHERE user_roles.RoleName LIKE 'Работник деканата'; +UPDATE `user_roles` SET user_roles.Mark = 5 WHERE user_roles.RoleName LIKE 'Преподаватель'; +UPDATE `user_roles` SET user_roles.Mark = 3 WHERE user_roles.RoleName LIKE 'Студент'; + + +-- 1 - common +-- 2 - student +-- 4 - teacher +-- 8 - admin +-- 16 - deans +INSERT INTO `user_roles` (`ID`, `Type`, `RoleName`, `Mark`) VALUES +(1, 'student', 'Студент', 3), +(2, 'teacher', 'Преподаватель', 5), +(3, 'teacher', 'Преподаватель-Администратор', 13), +(4, 'teacher', 'Работник деканата', 21)// INSERT INTO `page_access` (`ID`, `Pagename`, `Bitmask`) VALUES -(27, 'dean_office:index', 7)// --- TODO: restrict dean's +(1, 'common:index', 1), +(2, 'common:settings', 1), +(3, 'common:profile', 1), +(4, 'teacher:index', 4), +(5, 'teacher:settings', 4), +(6, 'teacher:map:create', 4), +(7, 'teacher:map:edit', 4), +(8, 'teacher:rating', 4), +(9, 'teacher:profile', 4), +(10, 'admin:common', 8), +(11, 'student:index', 2), +(12, 'student:settings', 2), +(13, 'student:subject', 2), +(14, 'teacher:map:discipline', 4), +(15, 'teacher:map:structure', 4), +(16, 'teacher:map:groups', 4), +(17, 'teacher:map:students', 4), +(18, 'teacher:map:teachers', 4), +(19, 'handler:AdmAccounts', 8), +(20, 'handler:AdmStudents', 8), +(21, 'handler:AdmTeachers', 8), +(22, 'handler:GetHelp', 1), +(23, 'handler:Map', 2), +(24, 'handler:Rating', 2), +(25, 'handler:Settings', 1), +(26, 'teacher:exam', 2), +(27, 'dean_office:index', 24); -DELIMITER ; \ No newline at end of file diff --git a/~dev_rating/application/classes/Controller/Handler.php b/~dev_rating/application/classes/Controller/Handler.php index 6e6b1d0d9150edae23762c09f2b96ce27b4555df..5fb6b4461ca77e6e91d33d3089a7855bc2753ecf 100644 --- a/~dev_rating/application/classes/Controller/Handler.php +++ b/~dev_rating/application/classes/Controller/Handler.php @@ -32,7 +32,10 @@ class Controller_Handler extends Controller { // Получаем имя маршрута $route = Route::name($this->request->route()); $route .= ':'.$this->request->controller(); - $userMark = $user->offsetGet('RoleMark'); + $userMark = (int)$user->offsetGet('RoleMark'); + if ($userMark == 0) { + $userMark = (int)1; + } // Если запрос не прошел на проверку доступа if( !$this->checkAccessLevel() || !$this->checkBitmask($userMark, $route)) @@ -50,7 +53,7 @@ class Controller_Handler extends Controller { protected function checkBitmask($userMark, $route) { $sysModel = new Model_System; - $bitmask = $sysModel->getBitmaskForRoute($route); + $bitmask = (int)$sysModel->getBitmaskForRoute($route); if(!$bitmask) return true; return ($bitmask & $userMark) != 0; diff --git a/~dev_rating/application/classes/Controller/UserEnvi.php b/~dev_rating/application/classes/Controller/UserEnvi.php index 7fc0298d434078457c6df0a2cc2505ce4602b067..f91d3bbcee26391ce0cc0d8a53ac30c445ae042d 100644 --- a/~dev_rating/application/classes/Controller/UserEnvi.php +++ b/~dev_rating/application/classes/Controller/UserEnvi.php @@ -24,7 +24,13 @@ class Controller_UserEnvi extends Controller { $route = Route::name($this->request->route()); $userMark = $user->offsetGet('RoleMark'); $sysModel = new Model_System; - $bitmask = $sysModel->getBitmaskForRoute($route); + $bitmask = (int)$sysModel->getBitmaskForRoute($route); + if ($bitmask === 0) { + $bitmask = (int)1; + } + if ($userMark === 0) { + $userMark = (int)1; + } if(!($bitmask & $userMark)) { throw HTTP_Exception::factory(403, 'Не пытайтесь попасть туда, куда попадать не следует.');