private String getSubstitutesRespString() throws ISPACException { if (StringUtils.isEmpty(resp)) { TreeSet respList = new TreeSet(); DbCnt cnt = context.getConnection(); try { Responsible user = context.getUser(); respList.addAll(user.getRespList()); if (mWorkMode == IWorklistAPI.SUPERVISOR) { SecurityMgr security = new SecurityMgr(cnt); // Sustituir (sustituidos por el usuario y por los grupos a los que pertenece el usuario) IItemCollection collection = security.getAllSubstitutes(user); addRespListFromEntryUID(respList, collection, "UID_SUSTITUIDO"); } } finally { context.releaseConnection(cnt); } resp = "'" + StringUtils.join(respList, "','") + "'"; } if (logger.isDebugEnabled()) { logger.debug("getSubstitutesRespString:" + resp); } return resp; }
/* (non-Javadoc) * @see ieci.tdw.ispac.api.IWorklistAPI#getCreateProcedures() */ public IItemCollection getCreateProcedures() throws ISPACException { // Si es supervisor podra crear todos, sino le corresponderan los suyos y y los que pueden crear // los que sustituye String resp = null; DbCnt cnt = context.getConnection(); try { Responsible user = context.getUser(); SecurityMgr securityMgr = new SecurityMgr(cnt); // Comprobar si el usuario tiene asignada la función de Supervisor Total if (securityMgr.isSupervisorTotal(user.getUID())) { resp = Responsible.SUPERVISOR; } else { // los que sustituye resp = getSubstitutesRespString(); } CollectionDAO pcdset = new CollectionDAO(PProcedimientoDAO.class); /* Procedimientos en vigor */ String sqlquery = "WHERE ESTADO=" + IProcedure.PCD_STATE_CURRENT + " AND TIPO=" + IProcedure.PROCEDURE_TYPE + " AND ID IN" + " (SELECT ID_PCD FROM SPAC_SS_PERMISOS WHERE PERMISO=" + ISecurityAPI.ISPAC_RIGHTS_CREATEEXP + DBUtil.addAndInResponsibleCondition("UID_USR", resp) + ") ORDER BY NOMBRE"; pcdset.query(cnt, sqlquery); return pcdset.disconnect(); } catch (ISPACException ie) { throw new ISPACException("Error en WLWorklist:getProcs()", ie); } finally { context.releaseConnection(cnt); } }
/* (non-Javadoc) * @see ieci.tdw.ispac.api.IWorklistAPI#getRespString() */ public String getRespString() throws ISPACException { if (StringUtils.isEmpty(resp)) { TreeSet respList = new TreeSet(); DbCnt cnt = context.getConnection(); try { Responsible user = context.getUser(); List respListUser = user.getRespList(); respList.addAll(respListUser); if (mWorkMode == IWorklistAPI.SUPERVISOR) { SecurityMgr securityMgr = new SecurityMgr(cnt); // Comprobar si el usuario tiene asignada la función de Supervisor if (securityMgr.isSupervisor(user.getUID())) { return Responsible.SUPERVISOR; } // Supervisar (supervisados del usuario, del departamento y de los grupos a los que // pertenece el usuario) IItemCollection collection = securityMgr.getAllSuperviseds(user); addRespListFromEntryUID(respList, collection, "UID_SUPERVISADO"); // Sustituir (sustituidos por el usuario, por el departamento y por los grupos a los que // pertenece el usuario) collection = securityMgr.getAllSubstitutes(user); addRespListFromEntryUID(respList, collection, "UID_SUSTITUIDO"); } } finally { context.releaseConnection(cnt); } resp = "'" + StringUtils.join(respList, "','") + "'"; } if (logger.isDebugEnabled()) { logger.debug("getRespString:" + resp); } return resp; }
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; }