alexespinola/api-organigrama

这个库允许您获取SOFSE组织结构图中的层级

1.0.0 2023-04-11 20:58 UTC

This package is not auto-updated.

Last update: 2024-09-27 20:17:57 UTC


README

Latest Stable Version License

api-organigrama 是一个库,允许您通过组织结构图提供的API将其区域集成到您的系统中。目的是让您能够定义用户属于哪些区域或具有访问权限,以便控制用户在浏览系统时可以看到的选项、行为或界面。

要求

  • PHP: ^8.0
  • laravel: ^9
  • composer
  • 在您的应用程序数据库中必须存在具有 idname 字段的 users 表。

依赖

  • JQuery ( $ )
  • Lodash ( _ )
  • Vue.js V3 (文件必须能够以以下方式导入:<script src="{{asset('js/vue.js')}}"></script>).

安装

  • 在您的应用程序的 .composer.json 文件中,如果不存在则定义 repositories 键,并在其中定义如下对象
"repositories": [
  {
    "type": "vcs",
    "url": "https://gitlab.sofse.gob.ar/alejandro.espinola/api-organigrama.git"
  }
]
  • 在您的终端中执行以下命令
    • composer require alexespinola/api-organigrama

配置

  • 在您的应用程序的 .env 文件中定义API组织结构图的URL

    • URL_API_ORGANIGRAMA=http://organigrama.sofse.gob.ar/public/api/v1/
  • 执行以下命令: php artisan migrate

视图

此库提供两个图形界面:一个用于配置您的系统将使用的区域,另一个用于将区域分配给您的系统用户。您决定用户如何导航到这些界面。这些界面的路由是

  • /config-areas
  • /areas-user/{user_id}/edit

发布配置文件

如果您想,可以使用以下命令发布此库的配置

php artisan vendor:publish --provider="apiOrganigrama\ApiOrganigramaServiceProvider" --tag="config"

这将在您的应用程序中创建一个配置文件: config/apiOrganigrama.php

发布视图

如果您想修改此包提供的视图,可以使用以下命令发布它们

php artisan vendor:publish --provider="apiOrganigrama\ApiOrganigramaServiceProvider" --tag="views"

这将在您的应用程序中创建一个包含所有视图的文件夹,位于 resources/views/vendor/apiOrganigrama

此库提供的视图需要您的应用程序具有一个视图基 resources/views/layouts/app.blade.php,该模板必须包括以下元素

  • 一个 <meta name="csrf-token" content="{{ csrf_token() }}" /> 标签,在HTML的head部分。
  • 一个 @yield('content') 用于插入HTML。
  • 一个 @stack('page_scripts') 用于插入JavaScript。

Organigama助手

此助手将帮助您

  • 通过向相应的API发起HTTP请求来获取SOFSE组织结构图的区域。
  • 根据区域配置,您的系统使用的区域。
  • 分配给每个用户的区域。

使用Organigama助手的说明

要使用 src/Helpers/Organigrama 中的助手,您可以将其导入到控制器或您需要的任何地方。

//Example Contreoller

<?php

namespace App\Http\Controller;

use apiOrganigrama\Helpers\Organigrama;

class ExampleController
{

}

Organigama助手方法的文档

/**
 * Retorna el nodo raíz del arbol del organigrama de SOFSE
 */
Organigrama::getRoot();

// Respuesta de ejemplo
{
  "id": 2,
  "nombre": "presidencia",
  "descripcion": "",
  "tipo_id": 1,
}

/**
 * Retorna todos los nodos del organigrama de SOFSE y sus relaciones
 */
Organigrama::getRelacionesNiveles();

// Respuesta de ejemplo
[
  {
    "id": 1,
    "profundidad": 0,
    "id_nivel_padre": 2,
    "id_nivel_hijo": 2,
    "nivel_hijo": {
      "id": 2,
      "nombre": "presidencia",
      "descripcion": "",
      "tipo_id": 1,
    }
  },
  {
    "id": 2,
    "profundidad": 1,
    "id_nivel_padre": 2,
    "id_nivel_hijo": 3,
    "nivel_hijo": {
      "id": 3,
      "nombre": "gerencia general de asuntos jurídicos",
      "descripcion": "",
      "tipo_id": 2,
  },
  ...
]

/**
 * Retorna los tipos de los nodos del organigrama de SOFSE
 * @param String $tiposId - opcional
 */
Organigrama::getLevelsTypes( $tiposId='1,4' );

// Respuesta de ejemplo
[
  {
    "id": 1,
    "nombre": "presidencia",
  },
  {
    "id": 4,
    "nombre": "gerencia de línea",
  }
]


/**
 * Retorna los nodos hijos de un padre del organigrama de SOFSE
 * @param Int $parentId - required (id del padre)
 * @param Int $deep - required (produndidad de los hijos)
 */
Organigrama::getLeavesByParent( $parentId=3, $deep=1 );

// Respuesta de ejemplo
[
  {
    "id": 13,
    "nombre": "gerencia dictámenes y asistencia jurídica",
    "descripcion": "",
    "tipo_id": 3,
    "parent_id": 3
  },
  {
    "id": 14,
    "nombre": "gerencia asuntos contenciosos",
    "descripcion": "",
    "tipo_id": 3,
    "parent_id": 3
  },
  {
    "id": 15,
    "nombre": "gerencia siniestros y servicios a las líneas",
    "descripcion": "",
    "tipo_id": 3,
    "parent_id": 3
  }
]


/**
 * Retorna los nodos a los que pertense un usuario segun $idTipoAreas 
 * Si $idPadres se pasa como tercer parametro se retornan solo los nodos de tipo $idTipoAreas e hijos de $idPadres
 * @param Int $userId - required (id del usuario)
 * @param Int $idTipoAreas - required (id de tipo de nodos)
 * @param Array $idPadres - opcional (ids de los padres)
 */
Organigrama::getAreasUser( $userId=463, $idTipoAreas=6 , $idPadres=[21,501] );

// Respuesta de ejemplo
[
  {
    "id": 42,
    "nombre": "obras civiles",
    "descripcion": "",
    "tipo_id": 6,
    "parent_id": 501
  },
  {
    "id": 43,
    "nombre": "vías",
    "descripcion": "",
    "tipo_id": 6,
    "parent_id": 21
  },
  ...
]


/**
 * Retorna los nodos a los que puede acceder un usuario segun $idTipoAreas sus permisos y el método y controlador que la aplicacion usa en cada petición 
 * Si $idPadres se pasa como cuarto parametro se retornan solo los nodos de tipo $idTipoAreas e hijos de $idPadres
 * @param Int $userId - required (id del usuario)
 * @param String,Null $method - required ( controlador@metodo alternativo al que se está utilizando ) si el valor es null, entonces tomará el que el framework usa en cada petición
 * @param Int $idTipoAreas - required (id de tipo de nodos)
 * @param Array $idPadres - opcional (ids de los padres)
 */
Organigrama::getAreasUserByPermissions( $userId=463, $method=null, $idTipoAreas=6 , $idPadres=[21,501] );

// Respuesta de ejemplo
[
  {
    "id": 42,
    "nombre": "obras civiles",
    "descripcion": "",
    "tipo_id": 6,
    "parent_id": 501
  },
  {
    "id": 43,
    "nombre": "vías",
    "descripcion": "",
    "tipo_id": 6,
    "parent_id": 21
  },
  ...
]