/** * Get menu with admin user role * * @param integer $role * @return array|mixed */ private function _getMenuAdmin($role) { $currentLink = '/admin/' . $this->_module . '/' . $this->_controller; $role = UserRoles::findFirst(['conditions' => 'role_id = ?0', 'bind' => [$role]]); if ($role) { /** * @var mixed $role */ $menu = unserialize($role->menu); foreach ($menu as $lv1 => $item) { if (isset($item['items']) && count($item['items'])) { foreach ($item['items'] as $lv2 => $childItem) { if (isset($childItem['items']) && count($childItem['items'])) { foreach ($childItem['items'] as $lv3 => $cChildItem) { if (strpos($cChildItem['link'], $currentLink) !== false) { $menu[$lv1]['items'][$lv2]['current'] = 1; } } } } } } return $menu; } return []; }
/** * Login * * @param string $email * @param string $password * @return bool */ public static function login($email, $password) { /** * @var Users $user */ $user = Users::findFirst(['conditions' => 'is_active = 1 AND email = ?0', 'bind' => [$email]]); /** * @var \Phalcon\Security $security */ $security = Di::getDefault()->get('security'); if ($user && Users::checkPassword($password, $user->salt, $user->password)) { $token = $security->getToken(); /** * @var UserRoles $role */ $role = UserRoles::findFirst($user->role_id); $acl = json_decode($role->acl, true); /** * @var \ZCMS\Core\ZSession $session */ $session = Di::getDefault()->get('session'); $session->set('auth', ['full_name' => $user->first_name . ' ' . $user->last_name, 'email' => $user->email, 'id' => $user->user_id, 'role' => $user->role_id, 'rules' => $acl['rules'], 'gender' => $user->gender, 'linkAccess' => $acl['links'], 'language' => $user->language_code, 'avatar' => $user->avatar, 'token' => $token, 'coin' => (double) $user->coin, 'created_at' => date('Y-m-d', strtotime($user->created_at)), 'is_super_admin' => $role->is_super_admin, 'last_use_admin' => time()]); return true; } return false; }
/** * Edit role * * @param int $id * @return bool */ public function editAction($id) { $id = intval($id); /** * @var UserRoles $edit_data */ $edit_data = UserRoles::findFirst(['conditions' => 'role_id = ?0', 'bind' => [$id]]); //If id not exist if (!$edit_data) { $this->flashSession->error("Cant not find that item to edit!"); return $this->response->redirect('/admin/system/role/'); } elseif ($edit_data->is_super_admin == 1) { $this->flashSession->error("You can't not edit Super Admin!"); return $this->response->redirect('/admin/system/role/'); } else { $this->view->setVar('edit_data', $edit_data); } //Add toolbar button $this->_toolbar->addSaveButton(); $this->_toolbar->addCancelButton("index"); $this->_addCSSAndJS(); //Get rules $this->getRules(); //Get edit rules /** * @var UserRoleMapping[] $edit_user_role_mapping */ $edit_user_role_mapping = UserRoleMapping::find(["conditions" => "role_id = ?0", "bind" => [0 => $edit_data->role_id]]); $edit_rules = []; foreach ($edit_user_role_mapping as $arm) { $edit_rules[] = $arm->rule_id; } $this->view->setVar('edit_rules_id', implode(",", $edit_rules)); if ($this->request->isPost()) { //Begin transaction $this->db->begin(); //Get current auth $auth = ZAcl::getInstance()->getAuth(); //Save admin role $edit_data->name = $this->request->getPost("name", "striptags"); $edit_data->updated_at = date("Y-m-d H:i:s"); $edit_data->updated_by = $auth['id']; $edit_data->location = (int) $this->request->getPost('location'); $edit_data->is_default = (int) $this->request->getPost('is_default'); if ($edit_data->save() == false) { $this->db->rollback(); return $this->flashSession->error("m_system_role_message_cannot_save_role"); } //Save admin role mapping $userRulesPost = trim($this->request->getPost("admin_rules"), ' '); if ($userRulesPost == '') { $this->db->commit(); $this->flashSession->success('m_system_role_message_new_role_was_created_successfully'); $this->response->redirect('/admin/system/role/'); return true; } $user_rules = explode(",", $userRulesPost); $number_new_rules = count($user_rules); $number_old_rules = count($edit_user_role_mapping); $sub = $number_new_rules - $number_old_rules; if ($sub < 0) { foreach ($edit_user_role_mapping as $key => $arm) { if ($user_rules[$key]) { $arm->rule_id = $user_rules[$key]; if ($arm->save() == false) { $this->db->rollback(); return $this->flashSession->error('m_system_role_message_update_role_failed'); } } else { if ($arm->delete() == false) { $this->db->rollback(); return $this->flashSession->error('m_system_role_message_update_role_failed'); } } } } elseif ($sub == 0) { //echo '<pre>'; var_dump($edit_user_role_mapping->toArray());echo '</pre>'; die(); foreach ($edit_user_role_mapping as $key => $arm) { $arm->rule_id = $user_rules[$key]; if ($arm->save() == false) { $this->db->rollback(); return $this->flashSession->error('m_system_role_message_update_role_failed'); } } } else { foreach ($edit_user_role_mapping as $key => $arm) { $arm->rule_id = $user_rules[$key]; if ($arm->save() == false) { $this->db->rollback(); return $this->flashSession->error('m_system_role_message_update_role_failed'); } } for ($i = $number_old_rules; $i < $number_new_rules; $i++) { $new_user_role_mapping = new UserRoleMapping(); $new_user_role_mapping->role_id = $edit_data->role_id; $new_user_role_mapping->rule_id = $user_rules[$i]; if ($new_user_role_mapping->save() == false) { $this->db->rollback(); return $this->flashSession->error('m_system_role_message_update_role_failed'); } } } //After all success full, commit transaction $this->db->commit(); $this->flashSession->success(__('m_system_role_message_new_role_was_updated_successfully', ['1' => $edit_data->name])); return $this->response->redirect('/admin/system/role/'); } return true; }