예제 #1
0
  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;
  }
예제 #2
0
  /* (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);
    }
  }
예제 #3
0
  /* (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;
  }
예제 #4
0
  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;
  }