public function saveRole(JosAdminRole $role) { $data = array('role_name' => $role->getRoleName()); $role_id = (int) $role->getRoleId(); if ($role_id == 0) { $this->tableGateway->insert($data); } else { if ($this->getRoleByArrayConditionAndArrayColumn(array('role_id' => $role_id), array())) { $this->tableGateway->update($data, array('role_id' => $role_id)); } else { return false; } } return true; }
public function updateAction() { // cập nhật lại tất cả các role theo usertype trong bảng user $jos_users_table = $this->getServiceLocator()->get('Permission\\Model\\JosUsersTable'); $role_names = $jos_users_table->getGiangVienByArrayConditionAndArrayColumns(array(), array(new Expression('DISTINCT(usertype) as role'))); $jos_role_table = $this->getServiceLocator()->get('Permission\\Model\\JosAdminRoleTable'); $roles = $jos_role_table->getRoleByArrayConditionAndArrayColumn(array(), array()); $array_roles = array(); foreach ($roles as $key => $value) { $array_roles[$value['role_name']] = $value; } // kiểm tra nếu có usertype mới mà trong bảng role hỏng tồn tại thì thêm vào bảng role foreach ($role_names as $key => $value) { if (!isset($array_roles[$value['role']])) { $role_new = new JosAdminRole(); $role_new->setRoleName($value['role']); $jos_role_table->saveRole($role_new); } } //Auto Save All Controller and Action //truy cập tablegateway resource $resource_table = $this->getServiceLocator()->get('Permission\\Model\\JosAdminResourceTable'); //Lấy danh sách module $manager = $this->getServiceLocator()->get('ModuleManager'); $modules = $manager->getLoadedModules(); $loaded_modules = array(); $valmodule = array_keys($modules); //Xác định action bỏ qua $skip_actions_list = array('notFoundAction', 'getMethodFromAction'); foreach ($valmodule as $loaded_module) { $module_class = '\\' . $loaded_module . '\\Module'; $module_object = new $module_class(); //truy cập phần cấu hình getConfig của từng module $config = $module_object->getConfig(); //Lấy ra danh sách controller if (isset($config['controllers'])) { $controllers = $config['controllers']['invokables']; foreach ($controllers as $key => $module_class) { //Trả về danh sách các hàm trong class controller, bao gồm cả các hàm kế thừa $tmp_array = get_class_methods($module_class); //Lấy ra danh sách các hàm là action foreach ($tmp_array as $action) { if (substr($action, strlen($action) - 6) === 'Action' && !in_array($action, $skip_actions_list)) { //Chèn tên action vào mảng action controller $array_modules[$loaded_module][$key][] = substr($action, 0, strlen($action) - 6); } } } } } // lưu lại những id đã sử dụng, để kiểm tra những id không sử dụng để xóa bỏ $array_id_used = array(); $array_action_is_white_list = array(); foreach ($array_modules as $key => $array_module) { // kiểm tra tên module có tồn tại trong csdl chưa $module = $resource_table->getResourceByArrayConditionAndArrayColumn(array('resource_type' => 'Module', 'resource' => $key, 'resource_object' => 'ACL'), array('resource_id')); // nếu chưa có thì lưu mới module if (!$module) { $jos_admin_resource = new JosAdminResource(); $jos_admin_resource->setParentId(0); $jos_admin_resource->setResource($key); $jos_admin_resource->setResourceName($key . ' Module'); $jos_admin_resource->setResourceType('Module'); $jos_admin_resource->setResourceObject('ACL'); $jos_admin_resource->setIsWhiteList(0); $jos_admin_resource->setIsHidden(0); $resource_table->saveResource($jos_admin_resource); // đảm bảo module đã tồn tại trong csdl rồi $module = $resource_table->getResourceByArrayConditionAndArrayColumn(array('resource_type' => 'Module', 'resource' => $key, 'resource_object' => 'ACL'), array('resource_id')); } $module_id = $module[0]['resource_id']; // id này đã được sử dụng $array_id_used[] = $module_id; // luu controller $array_controllers = $array_module; foreach ($array_controllers as $ctrl_key => $array_controller) { // get id controller $controller = $resource_table->getResourceByArrayConditionAndArrayColumn(array('resource_type' => 'Controller', 'resource' => $ctrl_key, 'resource_object' => 'ACL', 'parent_id' => $module_id), array('resource_id')); // nếu chưa có controller if (!$controller) { $jos_admin_resource = new JosAdminResource(); $jos_admin_resource->setParentId($module_id); $jos_admin_resource->setResource($ctrl_key); $jos_admin_resource->setResourceName($ctrl_key . ' Controller'); $jos_admin_resource->setResourceType('Controller'); $jos_admin_resource->setResourceObject('ACL'); $jos_admin_resource->setIsWhiteList(0); $jos_admin_resource->setIsHidden(0); $resource_table->saveResource($jos_admin_resource); // đảm bảo lấy được id controller $controller = $resource_table->getResourceByArrayConditionAndArrayColumn(array('resource_type' => 'Controller', 'resource' => $ctrl_key, 'resource_object' => 'ACL', 'parent_id' => $module_id), array('resource_id')); } $controller_id = $controller[0]['resource_id']; // id này đã được sử dụng $array_id_used[] = $controller_id; $array_actions = $array_controller; foreach ($array_actions as $array_action) { $action = $resource_table->getResourceByArrayConditionAndArrayColumn(array('resource' => $array_action, 'parent_id' => $controller_id, 'resource_type' => 'Action', 'resource_object' => 'ACL'), array('resource_id')); if (!$action) { $jos_admin_resource = new JosAdminResource(); $jos_admin_resource->setParentId($controller_id); $jos_admin_resource->setResource($array_action); $jos_admin_resource->setResourceName($array_action . ' Action'); $jos_admin_resource->setResourceType('Action'); $jos_admin_resource->setResourceObject('ACL'); $jos_admin_resource->setIsWhiteList(0); $jos_admin_resource->setIsHidden(0); $resource_table->saveResource($jos_admin_resource); $action = $resource_table->getResourceByArrayConditionAndArrayColumn(array('resource' => $array_action, 'parent_id' => $controller_id, 'resource_type' => 'Action', 'resource_object' => 'ACL'), array('resource_id')); } if ($action) { // id này đã được sử dụng $array_id_used[] = $action[0]['resource_id']; } } } } $array_id_not_used = $resource_table->getAllResourceIdUnexistResourceIdInArray($array_id_used); if ($array_id_not_used) { $resource_table->deleteResourceByResourceId($array_id_not_used); } return $this->redirect()->toRoute('permission/permission'); }