Exemplo n.º 1
0
  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;
  }
Exemplo n.º 2
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;
  }