定制 codegaf/storagemanager 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

codegaf/storagemanager

Composer 安装命令:

composer require codegaf/storagemanager

包简介

Paquete unificado de gestión de archivos.

README 文档

README

Latest Version on Packagist Total Downloads

Wrapper de Spatie Media Library y gestión de ficheros con privacidad Spatie Permission para Laravel.

Instalación

Puedes instalar el paquete via composer:

composer require codegaf/storagemanager dev-master

Guía de uso

Storage manager está creado como wrapper de Spatie Media Library, recogiendo sus principales funciones y envolviéndolas en otras globales con una sintaxis más fácil de recordar. Además, valiéndose de la librería Spatie Permission, se ha predefinido una serie de funciones que aportan capas de seguridad a niveles de roles, permisos e identificadores de usuario, al mismo tiempo que permite abrirse a nuevos casos.

El paquete se compone de las siguientes clases:

  • StorageManagerController: de acceso a través de un publish, esta clase tiene predefinida una serie de métodos que serán accesibles a través de http. Conecta con el servicio StorageManagerService.
  • StorageManagerService: de acceso a través de un publish, esta clase extiende de StorageManagerServiceBase y tiene creada la función por defecto checkPermissions. En esta función podremos establecer los permisos de los archivos por colecciones. En la clase StorageManagerServiceBase tenemos un ejemplo de cómo podría quedar una colección con permisos, utilizando los métodos predefinidos: userHasRole, userHasRoles, userIsOwner, userHasPermission. Si necesitamos ampliar la librería con nuevas funciones o sustituir alguna del base, podremos hacerlo en esta clase.
/**
     * Ejemplo. Comprueba los permisos establecidos por colección y media
     *
     * @param Media $media
     * @return bool
     */
    private function checkPermissionsExample(Media $media) {
        switch ($media->collection_name) {
            case 'avatar':
                if (!$this->userHasRole($media)) {
                    return false;
                }

                if (!$this->userIsOwner($media)) {
                    return false;
                }
                
                if (!$this->userHasRoles($media)) {
                    return false;
                }

                if (!$this->userHasPermission($media, 'download')) {
                    return false;
                }

                return true;
            default:
                return true;
        }
    }
  • StorageManagerServiceBase: Las funciones predefinidas en esta clase serán:

file -> (Media $media, string $conversionName = ''): Devuelve un archivo en función de los permisos. Puede devolver su conversión si se especifica.

addFile -> (Model $model, UploadedFile $file, string collection, array customProperties = []): Añade un nuevo media al modelo. A través de las custom properties podemos incluir permisos al archivo.

addFiles -> (Model $model, array $files, string $collection, array $customProperties): Añade múltiples medias a un modelo.

addFileFromBase64 -> (Model $model, string $base64File, string $fileName, string $collection, array $customProperties = []): Añade un nuevo media en formato base64 al modelo.

updateCustomProperties -> (Media $media, array $customProperties): Modifica los custom properties de un media.

deleteCustomProperties -> (Media, $media, array $customProperties): Elimina los custom properties pasados por parámetro.

deleteFile -> (Media $media, bool $force = false): Elimina un media de base de datos y su fichero asociado. Si pasamos true como segundo parámetro eliminaremos definitivamente un softDelete.

deleteModelFiles -> (Model $model, string $collection = ''): Elimina todos los medias de un modelo o los de la colección pasada por parámetro.

reorderFiles -> (array $ids, int $startOrder = 1): Ordena los media pasados por parámetros por defecto desde el número 1

filesByCollection -> (string $collection): Descarga un fichero zip con todas las imágenes originales de una colección.

filesByModel -> (array $data): Descarga un fichero zip con todos los ficheros de un modelo o los de la colección pasada por parámetro.

filesByIds -> (array $data): Descarga un fichero zip con todos los ficheros originales que correspondan a los ids pasados por parámetro.

userIsOwner -> (Media $media): Comprueba si el media tiene el id del usuario autenticado entre sus custom properties.

userHasRole -> (Media $media): Comprueba si el media tiene el rol del usuario autenticado entre sus custom properties.

userHasRoles -> (Media $media): Comprueba si el media tiene el rol del usuario entre los roles de la custom properties.

userHasPermission -> (Media $media, string $permission): Comprueba si el usuario y el media tiene el permiso pasado por parámetro.

  • CustomPathGenerator: Clase que hace override del comportamiento por defecto de Spatie a la hora de nombrar el path de los media. Se utiliza en el paquete para encriptar la carpeta del media.

  • Web.php: Recoge las rutas predefinidas del paquete con los middleware web y auth:

Una vez que hemos procedido a instalar el paquete tendremos que ejecutar el publish:

php vendor:publish --provider=Codegaf\StorageManager\StorageManagerProvider

Este comando publicará las clases StorageManagerController\StorageManagerController y StorageManagerService\StorageManagerService.

Por último, iremos al archivo config/medialibrary.php y en el índice "path_generator" añadiremos el CustomPathGenerator:

/*
     * The class that contains the strategy for determining a media file's path.
     */
    'path_generator' => \Codegaf\StorageManager\CustomPathGenerator::class,

Si estás cacheando el config no olvides hacer:

php artisan config:cache

Changelog

Please see CHANGELOG for more information what has changed recently.

Security

If you discover any security related issues, please email isaaccamrod@gmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

统计信息

  • 总下载量: 2.39k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-12-03

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固