0; } // Ведущий инженер // По ролям в компании static public function isDepartmentDirector(){ return Emp::isMeAnyDepartmentDirector(); } // Руководитель подразделения static public function isAnalysysYearBySubEmps(){ return Emp::isMeAnyDepartmentDirector() && !(self::isGIP() || self::isGroupProjectViewer()); //return Emp::isMeAnyDepartmentDirector() && !(self::isRP() || self::isGIP() || self::isGroupProjectViewer()); } // Руководитель подразделения // По группам static public function isGroupFinanceEditor(){ return Emp::isMeGroup(eEmpGroup::BUDGET_EDITOR);} // Бюджет: редактор static public function isGroupFinanceViewer(){ return Emp::isMeGroup(eEmpGroup::BUDGET_VIEWER); } // Бюджет: наблюдатель static public function isGroupProjectEditor(){ return Emp::isMeGroup(eEmpGroup::PROJECT_EDITOR); } // Проект: редактор static public function isGroupProjectViewer(){ return Emp::isMeGroup(eEmpGroup::PROJECT_VIEWER); } // Проект: наблюдатель static public function isGroupProjectFinance(){ return Emp::isMeGroup(eEmpGroup::PROJECT_FINANCE); } // Проект: финансы static public function isGroupStaff(){ return Emp::isMeGroup(eEmpGroup::STAFF);} // Кадры static public function isGroupMoscow(){ return Emp::isMeGroup(eEmpGroup::OFFICE_MOSCOW); } // Офис. Москва static public function isGroupIvanovo(){ return Emp::isMeGroup(eEmpGroup::OFFICE_IVANOVO);} // Офис. Иваново static public function isGroupNovosibirsk(){ return Emp::isMeGroup(eEmpGroup::OFFICE_NOVOSIBORSK);} // Офис. Новосибирск static public function isGroupKrasnodar(){ return Emp::isMeGroup(eEmpGroup::OFFICE_KRASNODAR);} // Офис. Краснодар static public function isGroupSemei(){ return Emp::isMeGroup(eEmpGroup::OFFICE_SEMEI);} // Офис. Семей static public function isGroupCompany(){ return Emp::isMeGroup(eEmpGroup::COMPANY);} // Компания //--------------- // Теперь сами права доступов // Вспомогательные функции static public function checkRule($rule) { if(self::isAdmin()) return true; return in_array($rule,self::getMyRules()); } static $projects; static function getProjectForAnalysis(){ if(isset(self::$projects)) return self::$projects; return self::$projects = Project::getListForAnalysis(); } static $cacheMemberRoles = []; static public function getRoleInProject($pid){ if(isset(self::$cacheMemberRoles[$pid])) return self::$cacheMemberRoles[$pid]; $project = Project::getByID($pid); $teamId = $project[Project::$TEAM]; $r = Member::select([ \Query::WHERE => new \Where(\Where::_and([ \Where::_operator( Member::$EMP,'=',Emp::$AUTH_ID), \Where::_operator( Member::$TEAM,'=',$teamId), ])), \Query::COUNT => 1, ]); $l = \DB::fetch($r); return self::$cacheMemberRoles[$pid] = $l[Member::$ROLE]; } static public function isMeDirector($pid) { return Project::getByID(intval($pid))[Project::$DIRECTOR]==Emp::$AUTH_ID; } static function isGipInProject($pid){ return self::getRoleInProject($pid)==eMemberRole::MAIN_ENGINEER; } static function isGapInProject($pid){ return self::getRoleInProject($pid)==eMemberRole::MAIN_ARCHITECT; } static function isGkpInProject($pid){ return self::getRoleInProject($pid)==eMemberRole::MAIN_CONSTRUCTOR; } static function isMainEngineerInProject($pid){ return in_array(self::getRoleInProject($pid),self::$mainEngineersRoles); } static $subemps; static public function getSubEmps(){ if(isset(self::$subemps)) return self::$subemps; return self::$subemps = Emp::getSubEmps(Emp::$AUTH_ID); } static public function isSubEmp($emp_id){ return in_array($emp_id,self::getSubEmps()); } static function isEmpInMyCity($emp_id) { $emp = Emp::getByID($emp_id); $city = City::getByID(intval( $emp[Emp::$CITY]))[City::$GROUP]; $isMoscow = self::isGroupMoscow() && $city==eEmpGroup::OFFICE_MOSCOW; $isIvanovo = self::isGroupIvanovo() && $city==eEmpGroup::OFFICE_IVANOVO; $isNovosibirsk = self::isGroupNovosibirsk() && $city==eEmpGroup::OFFICE_NOVOSIBORSK; $isKrasnodar = self::isGroupKrasnodar() && $city==eEmpGroup::OFFICE_KRASNODAR; $isSemei = self::isGroupSemei() && $city==eEmpGroup::OFFICE_SEMEI; return $isMoscow || $isIvanovo || $isNovosibirsk || $isKrasnodar || $isSemei; } static $myCitySubEmps; static function getMyCitySubEmps(){ if(isset(self::$myCitySubEmps)) return self::$myCitySubEmps; $res = []; $groups = Group::get(Emp::$AUTH_ID); if($groups) { $r = Emp::select([ \Query::SELECT => [Emp::$ID], \Query::WHERE => new \Where(\Where::_and([ \Where::_inQuery(Emp::$CITY, [ \Query::TABLES => [City::$table_name], \Query::SELECT => [City::$ID], \Query::WHERE => new \Where(\Where::_in(City::$GROUP, $groups)) ]) ])) ]); while ($l = \DB::fetch($r)) { $res[] = $l[Emp::$ID]; } } return self::$myCitySubEmps = $res; } static $readEmpIdsForTableAndAnalysis; static function getReadEmpIdsForTableAndAnalysis() { if(isset(self::$readEmpIdsForTableAndAnalysis)) return self::$readEmpIdsForTableAndAnalysis; $res = self::getSubEmps(); $projects = self::getProjectForAnalysis(); $teamIds = []; foreach ($projects as $project) { $teamIds[] = $project[Project::$TEAM]; } if($teamIds) { $r = Member::select([ \Query::SELECT => [Member::$EMP], \Query::WHERE => new \Where(\Where::_and([ \Where::_in(Member::$TEAM, $teamIds), ])) ]); while ($l = \DB::fetch($r)) { $res[] = $l[Member::$EMP]; } } $res = array_merge($res,self::getMyCitySubEmps()); $res = array_values(array_unique($res)); return self::$readEmpIdsForTableAndAnalysis = array_unique($res); } // Личный кабинет static public function isMyTable() { return self::checkRule(self::MY_TABLE); } static public function isMyProjects() { return self::checkRule(self::MY_PROJECTS); } static public function isMyCompany() { return self::checkRule(self::MY_COMPANY); } static public function isAnalysisMy() { return self::checkRule(self::ANALYSIS_MY); } static public function isAnalysisProjects() { return self::checkRule(self::ANALYSIS_PROJECTS); } static public function isAnalysisProjectsProject($PROJECT_ID) { if(self::isAdmin()) return true; $role = self::getRoleInProject($PROJECT_ID); $isRole = in_array($role,[eMemberRole::MAIN_ENGINEER]); $isRp = self::isMeDirector($PROJECT_ID); $isProjectViewer = self::isGroupProjectViewer(); return $isRole || $isRp || $isProjectViewer; } static public function isAnalysisProjectsSection($PROJECT_ID) { if(self::isAdmin()) return true; $role = self::getRoleInProject($PROJECT_ID); $isRole = in_array($role,[eMemberRole::MAIN_ENGINEER,eMemberRole::MAIN_ARCHITECT,eMemberRole::MAIN_CONSTRUCTOR]); $isRp = self::isMeDirector($PROJECT_ID); $isProjectViewer = self::isGroupProjectViewer(); $isDepartment = Emp::isMeAnyDepartmentDirector(); return $isRole || $isRp || $isProjectViewer || $isDepartment; } static public function isAnalysisProjectsSubsection($PROJECT_ID) { if(self::isAdmin()) return true; $role = self::getRoleInProject($PROJECT_ID); $isRole = in_array($role,[eMemberRole::MAIN_ENGINEER,eMemberRole::MAIN_ARCHITECT,eMemberRole::MAIN_CONSTRUCTOR]) || in_array($role,self::$mainEngineersRoles); $isRp = self::isMeDirector($PROJECT_ID); $isProjectViewer = self::isGroupProjectViewer(); $isDepartment = Emp::isMeAnyDepartmentDirector(); return $isRole || $isRp || $isProjectViewer || $isDepartment; } static public function isAnalysisProjectsTeam($PROJECT_ID) { if(self::isAdmin()) return true; $role = self::getRoleInProject($PROJECT_ID); $isRole = in_array($role,[eMemberRole::MAIN_ENGINEER,eMemberRole::MAIN_ARCHITECT,eMemberRole::MAIN_CONSTRUCTOR]) || in_array($role,self::$mainEngineersRoles); $isRp = self::isMeDirector($PROJECT_ID); $isProjectViewer = self::isGroupProjectViewer(); $isDepartment = Emp::isMeAnyDepartmentDirector(); return $isRole || $isRp || $isProjectViewer || $isDepartment; } static public function isAnalysisProjectsFinance($PROJECT_ID = 0) { if(self::isAdmin()) return true; else return true; $isGroup = self::isGroupProjectFinance(); if(!$PROJECT_ID){ //return $isGroup || Emp::isMeAnyDirector(); return $isGroup || Emp::isMeAnyDirector(); } $role = self::getRoleInProject($PROJECT_ID); $isRole = false;//in_array($role,[eMemberRole::MAIN_ENGINEER]); $isRp = self::isMeDirector($PROJECT_ID); return $isRole || $isRp || $isGroup; } static public function isAnalysisProjectsShowMoney($PROJECT_ID = 0) { if(self::isAdmin()) return true; $isGroup = self::isGroupProjectFinance(); $isRp = $PROJECT_ID ? self::isMeDirector($PROJECT_ID) : Emp::isMeAnyDirector(); //if($PROJECT_ID) $isRp = false; return $isGroup || $isRp; } static public function isAnalysisProjectsSummary() { return self::checkRule(self::ANALYSIS_PROJECTS_SUMMARY); } static public function isAnalysisYear() { return self::checkRule(self::ANALYSIS_YEAR); } static public function isAnalysisCompany() { return self::checkRule(self::ANALYSIS_COMPANY) || self::checkRule(self::ANALYSIS_MOSCOW) || self::checkRule(self::ANALYSIS_IVANOVO) || self::checkRule(self::ANALYSIS_NOVOSIBIRSK) || self::checkRule(self::ANALYSIS_KRASNODAR) || self::checkRule(self::ANALYSIS_SEMEI) || Emp::isMeAnyDepartmentDirector() ; } static public function isAnalysisAllProjects() { return self::isAdmin() || self::isGroupProjectViewer() || Emp::isMeAnyDirector() ; } static public function isAnalysisStaff() { return self::checkRule(self::ANALYSIS_STAFF); } static public function isAnalysisFot() { return self::checkRule(self::ANALYSIS_FOT); } static public function isAnalysisMoscow() { return self::checkRule(self::ANALYSIS_MOSCOW); } static public function isAnalysisIvanovo() { return self::checkRule(self::ANALYSIS_IVANOVO); } static public function isAnalysisNovosibirsk() { return self::checkRule(self::ANALYSIS_NOVOSIBIRSK); } static public function isAnalysisKrasnodar() { return self::checkRule(self::ANALYSIS_KRASNODAR); } static public function isAnalysisSemei() { return self::checkRule(self::ANALYSIS_SEMEI); } static public function isProjectsList() { return self::checkRule(self::PROJECTS_LIST); } static public function isProjectsAddButton() { return self::checkRule(self::PROJECTS_ADD_BUTTON); } static public function isProjectsTeamButton() { return self::checkRule(self::PROJECTS_TEAM_BUTTON); } static public function isProjectsContractor() { return self::checkRule(self::PROJECTS_CONTRACTOR); } static public function isStaffEmployee() { return self::checkRule(self::STAFF_EMPLOYEE); } static public function isStaffAbsence() { return self::checkRule(self::STAFF_ABSENCE); } static public function isStaffStatus() { return self::checkRule(self::STAFF_STATUS); } static public function isStaffOrgtype() { return self::checkRule(self::STAFF_ORGTYPE); } static public function isArchiveProjects() { return self::checkRule(self::ARCHIVE_PROJECTS); } static public function isArchiveEmployee() { return self::checkRule(self::ARCHIVE_EMPLOYEE); } static public function isMoneyFot() { return self::checkRule(self::MONEY_FOT); } static public function isRwMyTable() { return self::checkRule(self::RW_MY_TABLE); } static function isAnalysisCompanyEmp3() { return self::checkRule(self::ANALYSIS_COMPANY_EMP3); } static function toIntArray(&$arr){foreach ($arr as $k => $v) {$arr[$k] = intval($v);} return $arr;} static public function readOtherTableRead() { $isProjectViewer = self::isGroupProjectViewer(); $isStaff = self::isGroupStaff(); $isCompany = self::isGroupCompany(); if($isProjectViewer || $isStaff || $isCompany) return [-1]; $res = self::getReadEmpIdsForTableAndAnalysis(); return self::toIntArray($res); } static public function writeOtherTableWrite() { $res = array_merge(self::getSubEmps(),self::getMyCitySubEmps()); $res = array_values(array_unique($res)); return self::toIntArray($res); } static public function readAnalysisTableEmp() { $isProjectViewer = self::isGroupProjectViewer(); $isStaff = self::isGroupStaff(); $isCompany = self::isGroupCompany(); if($isProjectViewer || $isStaff || $isCompany || self::isAdmin()) return [-1]; $res = self::getReadEmpIdsForTableAndAnalysis(); return self::toIntArray($res); } static function isWriteOtherTableWrite($emp_id){ if(self::isAdmin()) return true; if(in_array($emp_id,self::writeOtherTableWrite())) return true; return false; } static function isReadAnalysisTableEmp($emp_id) { if($emp_id==Emp::$AUTH_ID) return true; if(self::isAdmin()) return true; if(self::readAnalysisTableEmp()[0]==-1) return true; if(in_array($emp_id,self::readAnalysisTableEmp())) return true; return false; } static public function isRwProjectEditWithoutRp($PROJECT_ID) { if(!$PROJECT_ID) return true; $isRp = self::isMeDirector($PROJECT_ID); return $isRp || self::checkRule(self::RW_PROJECT_EDIT_RP_WRITE); } static public function isRwProjectEditRpRead() { return self::checkRule(self::RW_PROJECT_EDIT_RP_READ); } static public function isRwProjectEditRpWrite($PROJECT_ID) { return self::checkRule(self::RW_PROJECT_EDIT_RP_WRITE); } static public function isRwProjectButtonAllEmp() { return self::checkRule(self::RW_PROJECT_BUTTON_ALL_EMP); } static public function isRwMember($team_id,$MEMBER_ID = null) { if(self::isAdmin()) return true; $project = Project::getOneEqualByColumn(Project::$TEAM,$team_id); $projectId = $project[Project::$ID]; $isRp = self::isMeDirector($projectId); $role = self::getRoleInProject($projectId); $isRole = in_array($role,[eMemberRole::MAIN_ENGINEER]); $isDepartment = false; if($MEMBER_ID) { $member = Member::getByID($MEMBER_ID); $subemps = self::getSubEmps(); $isDepartment = in_array($member[Member::$EMP], $subemps); }else { $isDepartment = Emp::isMeAnyDepartmentDirector(); } return $isRp || $isRole || $isDepartment; } static public function isRwContractor() { return self::checkRule(self::RW_CONTRACTOR); } static public function isRwEmpWithoutAdmin() { return self::checkRule(self::RW_EMP_WITHOUT_ADMIN); } static public function isRwEmpAdmin() { return self::checkRule(self::RW_EMP_ADMIN); } static public function isRwCardEmpInfo() { return self::checkRule(self::RW_CARD_EMP_INFO); } static public function isRwCardEmpStaff($emp_id) { $isDepartment = self::isSubEmp($emp_id); $isStuff = self::isGroupStaff(); $isMe = $emp_id==Emp::$AUTH_ID; return $isDepartment || $isStuff || $isMe; } static public function isRwCardEmpAdmin($emp_id) { return self::isAdmin(); } static public function isRwCardEmpActiveProjects($emp_id) { $isRp = self::isRP(); $isGip = self::isGip(); $isDepartment = self::isSubEmp($emp_id); $isProjectViewer = self::isGroupProjectViewer(); $isStuff = self::isGroupStaff(); $isCompany = self::isGroupCompany(); $isInMyCity = self::isEmpInMyCity($emp_id); $isMe = $emp_id==Emp::$AUTH_ID; return $isRp || $isGip || $isDepartment || $isProjectViewer || $isStuff || $isCompany || $isInMyCity || $isMe; } }