public String getRespStringSubProceso(int idStagePCD, int id_pcd) throws ISPACException { String responsibles = ""; try { IInvesflowAPI invesFlowApi = context.getAPI(); int idPcd = id_pcd; ISecurityAPI securityAPI = invesFlowApi.getSecurityAPI(); responsibles = getRespString(); // Comprobar si el usuario es SUPERVISOR if (!Responsible.SUPERVISOR.equalsIgnoreCase(responsibles)) { if (idStagePCD != 0) { IItem stage = invesFlowApi.getProcedureStage(idStagePCD); idPcd = stage.getInt("ID_PCD"); } IItemCollection itemcol = securityAPI.getPermission(ISecurityAPI.PERMISSION_TPOBJ_PROCEDURE, idPcd, null); while (itemcol.next()) { responsibles += " , '" + itemcol.value().getString("ID_RESP") + "'"; } } } catch (ISPACException ie) { logger.error("Error en WLWorklist:getRespStringSubProceso(" + idStagePCD + ")", ie); throw new ISPACException( "Error en WLWorklist:getRespStringSubProceso(" + idStagePCD + ")", ie); } return responsibles; }
public boolean isInResponsibleList(String sUID, int supervisionType, IItem item) throws ISPACException { DbCnt cnt = context.getConnection(); List listSupervisados = new ArrayList(); List listSustituidos = new ArrayList(); int i = 0; try { // Comprobar el UID en la cadena de responsabilidad directa del usuario Responsible user = context.getUser(); if (user.isInResponsibleList(sUID)) { return true; } if (mWorkMode == IWorklistAPI.SUPERVISOR) { SecurityMgr securityMgr = new SecurityMgr(cnt); // Comprobar si el usuario es Supervisor en Modo Modificación if (securityMgr.isFunction(user.getUID(), ISecurityAPI.FUNC_TOTALSUPERVISOR)) { return true; } // Comprobar si el usuario es Supervisor en Modo Consulta, si aplica if ((supervisionType != ISecurityAPI.SUPERV_TOTALMODE) && securityMgr.isFunction(user.getUID(), ISecurityAPI.FUNC_MONITORINGSUPERVISOR)) { return true; } // Comprobar las responsabilidades referentes a las supervisiones IItemCollection collection = null; if (supervisionType == ISecurityAPI.SUPERV_TOTALMODE) { collection = securityMgr.getAllSuperviseds(user, ISecurityAPI.SUPERV_TOTALMODE); } else { collection = securityMgr.getAllSuperviseds(user); } while (collection.next()) { IItem supervisor = (IItem) collection.value(); listSupervisados = getRespListFromEntryUID(supervisor.getString("UID_SUPERVISADO")); if (listSupervisados.contains(sUID)) { return true; } } // Comprobar las responsabilidades referentes a las sustituciones collection = securityMgr.getAllSubstitutes(user); while (collection.next()) { IItem substitute = (IItem) collection.value(); listSustituidos = getRespListFromEntryUID(substitute.getString("UID_SUSTITUIDO")); if (listSustituidos.contains(sUID)) return true; } // Comprobar si tenemos permisos a nivel de catálogo if (item != null) { if (logger.isDebugEnabled()) { logger.debug( "El responsable " + sUID + "No tiene permisos genéricos, " + "vamos a comprobar si tiene permisos a nivel" + "de catálogo (permisos sobre un procedimiento)"); } ISecurityAPI securityAPI = context.getAPI().getSecurityAPI(); int[] permisos = new int[1]; permisos[0] = ISecurityAPI.PERMISSION_TYPE_EDIT; // Componemos la cadena de responsabilidad separada por comas List resp = user.getRespList(); String cadenaResp = ""; // Al menos esta el propio usuario cadenaResp = "'" + DBUtil.replaceQuotes(resp.get(0).toString()) + "'"; for (i = 1; i < resp.size(); i++) { cadenaResp += " , '" + DBUtil.replaceQuotes(resp.get(i).toString()) + "'"; } for (i = 0; i < listSupervisados.size(); i++) { cadenaResp += " , '" + DBUtil.replaceQuotes(listSupervisados.get(i).toString()) + "'"; } for (i = 0; i < listSustituidos.size(); i++) { cadenaResp += " , '" + DBUtil.replaceQuotes(listSustituidos.get(i).toString()) + "'"; } // Item puede ser IProcess , IStage , ITask if (item instanceof ITask) { return securityAPI.existPermissions((ITask) item, cadenaResp, permisos); } else if (item instanceof IStage) { if (IPcdElement.TYPE_SUBPROCEDURE == item.getInt("TIPO")) { IInvesflowAPI api = context.getAPI(); IEntitiesAPI entitiesAPI = api.getEntitiesAPI(); String sql = "WHERE TIPO=" + IPcdElement.TYPE_PROCEDURE + " AND"; sql += " NUMEXP = '" + DBUtil.replaceQuotes(item.getString("NUMEXP")) + "'"; IItemCollection col = entitiesAPI.queryEntities(SpacEntities.SPAC_FASES, sql); if (col.next()) { IItem fasePadre = col.value(); int id = fasePadre.getKeyInt(); IStage stage = api.getStage(id); return securityAPI.existPermissions(stage, cadenaResp, permisos); } } return securityAPI.existPermissions((IStage) item, cadenaResp, permisos); } else if (item instanceof IProcess) { return securityAPI.existPermissions((IProcess) item, cadenaResp, permisos); } } } } finally { context.releaseConnection(cnt); } return false; }