alexespinola / api-organigrama
这个库允许您获取SOFSE组织结构图中的层级
Requires
- php: ^8.0.2
- laravel/framework: 9.*
Requires (Dev)
- orchestra/testbench: 5.*
- phpunit/phpunit: ^8.5
This package is not auto-updated.
Last update: 2024-09-27 20:17:57 UTC
README
api-organigrama 是一个库,允许您通过组织结构图提供的API将其区域集成到您的系统中。目的是让您能够定义用户属于哪些区域或具有访问权限,以便控制用户在浏览系统时可以看到的选项、行为或界面。
要求
PHP: ^8.0
laravel: ^9
composer
- 在您的应用程序数据库中必须存在具有
id
和name
字段的 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组织结构图的URLURL_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 }, ... ]