承接 dmstr/yii2-filefly-module 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

dmstr/yii2-filefly-module

Composer 安装命令:

composer require dmstr/yii2-filefly-module

包简介

FlySystem API for Filemanager

README 文档

README

Latest Stable Version Total Downloads License

FlySystem API for dmstr/yii2-filemanager-widgets

Installation

ENV variables

Variable Value Required
AFM_FILESYSTEM yii component name yes
AFM_REPAIR default: true no
AFM_SLUG_NAMES default: true no
AFM_DELETE_RECURSIVE default: false no

i.e. AFM_FILESYSTEM=fsLocal

❓ How to configure a filesystem component Filesystem docs

Yii config

'filefly' => [
    'class'              => 'hrzg\filefly\Module',
    'layout'             => '@backend/views/layouts/main',
    'filesystem'         => getenv('AFM_FILESYSTEM'),
    'slugNames'			 => (getenv('AFM_SLUG_NAMES')) ? getenv('AFM_SLUG_NAMES') : true,
    'repair'             => (getenv('AFM_REPAIR')) ? getenv('AFM_REPAIR') : true,
    'deleteRecursive'    => (getenv('AFM_DELETE_RECURSIVE')) ? getenv('AFM_DELETE_RECURSIVE') : false,
    'streamExpireOffset' => 604800 # Offset (in seconds) for Expires Header in stream action
    'defaultPermissions' => [
        \hrzg\filefly\Module::ACCESS_OWNER  => 1,
        \hrzg\filefly\Module::ACCESS_READ   => \hrzg\filefly\models\FileflyHashmap::$_all,
        \hrzg\filefly\Module::ACCESS_UPDATE => \hrzg\filefly\models\FileflyHashmap::$_all,
        \hrzg\filefly\Module::ACCESS_DELETE => \hrzg\filefly\models\FileflyHashmap::$_all,
    ],
    # the urlCallbck property can be used to provide customized urls for each file item which (if defined) will overwrite 
    # the default handler URLs
    'urlCallback'        => function($item) {
		$urls = [];
		$isImageFileExtList = ['jpg', 'jpeg', 'gif', 'tiff', 'tif', 'svg', 'png', 'bmp'] ;
		if ($item['type'] === 'file') {
			if (in_array(strtolower($item['extension']), $isImageFileExtList)) {
				$urls['image url'] = \dmstr\willnorrisImageproxy\Url::image($item['path']);
			}
			else {
				$urls['download url'] = implode('/', ['/img/download', ltrim($item['path'], '/')]) . ',p1';
			}
		}
		return $urls;
	},
	// previewCallback can be used to overwrite the default downloadUrl for preview URLs within filemanagerApp
	'previewCallback' => function($item) {
		$isImageFileExtList = ['jpg', 'jpeg', 'gif', 'tiff', 'tif', 'png', 'bmp'] ;
		if ($item['type'] === 'file') {
			if (in_array(strtolower($item['extension']), $isImageFileExtList)) {
				return \dmstr\willnorrisImageproxy\Url::image($item['path'], '500x');
			}
		}
		return '';
	}
],

RBAC

Prosa

  • FileflyAdmin full module access including debug information

  • FileflyDefault management access (eg. POST request for upload, change, delete)

  • FileflyPermissions assigned users can set or unset roles or permissions which the user himself has assigned

  • access_owner permission before access_read, access_update, access_delete

  • If no permission is set, it will check if any inherited permission can be granted

So if inherited access_* permissions should be used, set defaultPermissions to null NOT to '*'.

            'defaultPermissions' => [
                \hrzg\filefly\Module::ACCESS_OWNER  => 1,
                \hrzg\filefly\Module::ACCESS_READ   => null,
                \hrzg\filefly\Module::ACCESS_UPDATE => null,
                \hrzg\filefly\Module::ACCESS_DELETE => null,
            ],

ActiveRecord: FileflyHashmap

  • uses dmstr\activeRecordPermissions\ActiveRecordAccessTrait with $activeAccessTrait = false
  • access checks will be done for each permission type explicitly, hasPermission($action)
  • uses a pathValidator rule to ensure the path syntax on active record operations

Roles

  • FileflyAdmin

    • filefly
  • FileflyDefault

    • filefly_default_index
  • FileflyApi

    • filefly_api_index
  • FileflyPermissions

Permissions

  • filefly
  • filefly_default_index
  • filefly_api_index

RBAC Plugins

Permission checks will ever come after file or folder operation

GrantPermission

Granted or deny permission

1. access field empty (is owner, true or continue)
2. access field set (permission granted, true)
   access field set (is access owner, true, permission denied, false)

SetPermission

Create or update permission

1. Add new hash records
2. Update hash records (recursive option)

- Multi create and update option

RemovePermission

Remove permission

1. Deletes file or folder records

- Multi delete option

CLI

Configure

'controllerMap' => [
    'fs' => [
        'class' => '\hrzg\filefly\commands\FsController',
        'filesystemComponents' => [
            'local' => 'fs',
            's3' => 'fsS3',
            'storage' => 'fsFtp',
        ],
    ],
]

Widget

see https://github.com/dmstr/yii2-filemanager-widgets

    {{ use ('hrzg/filemanager/widgets') }}
    {{ file_manager_widget_widget(
        {
            "handlerUrl": "/#{app.language}/filefly/api"
        }
    ) }}

Options for the yii2-filemanager-widgets Widget can be injected via the Module property fileManagerWidgetOptions

example:

        'filefly' => [
            'filesystemComponents' => [
                'ftp' => 'fsFtp',
                'ftpcrud' => 'fsFtpCrud',
            ],
            // ...
            // other configs
            // ...
            // Options for the angular fileManagerWidget
            'fileManagerWidgetOptions' => [
                'searchForm' => false,
                'allowedActions' => [
                    'move' => false,
                    'upload' => false,
                    'createFolder' => false,
                    ],
            ],
        ],

Controller action in iFrame

Modal button

<a type="button" data-toggle="modal" data-target="#modal-filemanager" id="filefly-iframe-toggle">  
    <i class="fa fa-folder-open"></i>
</a>

Load event listener

<script>
    window.addEventListener('load', function () {
        var fileflyIframeToggle = document.querySelector('#filefly-iframe-toggle');
        var iframe = document.querySelector('#filefly-iframe');
        
        fileflyIframeToggle.addEventListener('click', function () {
            iframe.src = "/filefly/default/filemanager-full-screen";
        });
    });
</script>

Iframe

{{ use ('yii/bootstrap') }}
{{ modal_begin(    
{        
    'id': 'modal-filemanager',
	'size': 'modal-lg'    
}) }}

<iframe id="filefly-iframe"  width="100%" height="100%" frameborder="0" src=""></iframe>

{{ modal_end() }}'

Helper

Description Method call Example output
Total size for all filesystems FileflyHashmap::getTotalSize() 202.82 MiB
Total size for all filesystems (raw bytes) FileflyHashmap::getTotalSize(true) 212670464
Total size for local filesystems FileflyHashmap::getTotalSize(false, 'local') 48.32 MiB
Total size for s3 filesystems (raw bytes) FileflyHashmap::getTotalSize(true, 's3') 166546843

dmstr/yii2-filefly-module 适用场景与选型建议

dmstr/yii2-filefly-module 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 64.33k 次下载、GitHub Stars 达 9, 最近一次更新时间为 2017 年 02 月 20 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「extension」 「yii2」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 dmstr/yii2-filefly-module 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 dmstr/yii2-filefly-module 我们能提供哪些服务?
定制开发 / 二次开发

基于 dmstr/yii2-filefly-module 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

  • Stars: 9
  • Watchers: 7
  • Forks: 8
  • 开发语言: PHP

其他信息

  • 授权协议: proprietary
  • 更新时间: 2017-02-20