mirror of
https://github.com/nocobase/nocobase
synced 2024-11-16 01:45:53 +00:00
53d0c2dd23
* feat: support to add File collection
* feat: support to upload files
* refactor: rename 'ReadPretty.Attachment' to 'ReadPretty.File'
* feat: support to associate the File collection
* refactor: add Preview and replace Upload.Selector
* fix(Preview): fix some problems in ReadPretty mode
* feat: use 'preview' as a default title field
* feat: support only local storage now
* fix: should not show 'Add new' button
* chore: add default value for file storage
* fix: fix preview field of file collection cannot be displayed normally
* fix: only Table and Details can display File collection
* chore: translate
* refactor: migration to plugin from core
* refactor: change 'preview' to 'url'
* fix: only 'belongsTo' and 'belongsToMany' can linked file collection
* fix: fix storage and add a field called storage in file collection
* feat: add 'deletable' to configure the visibility of the delete button
* fix: fix can't upload attachment problem
* fix: remove more option
* fix: can't use preview to filter
* fix: remove Import action option
* refactor: remove useless code
* chore: optimize condition
* chore: remove comment
* test: windows compatible
* refactor: optimize upload
* fix: upload action
* fix: createAction
* fix: uploads
* fix: file collection cannot be inherited by other collections
* fix: url should be editable
* fix: url is filterable
* fix: use input interface for url field
* fix: fix error
* fix: remove subform
* Revert "chore: translate"
This reverts commit 53cd346dab
.
* refactor: move translation to plugin
* fix: title is editable
* fix: collection?.template === 'file'
* fix: fix order of URL
* fix(collection-manager): allow collectionCategories:list
* chore: add translation
* fix(upload): should enable to use drawer
* refactor: move code to plugin
---------
Co-authored-by: chenos <chenlinxh@gmail.com>
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { Plugin } from '@nocobase/server';
|
|
import { resolve } from 'path';
|
|
import { createAction, uploadAction, middleware as uploadMiddleware } from './actions/upload';
|
|
import { STORAGE_TYPE_LOCAL } from './constants';
|
|
import { getStorageConfig } from './storages';
|
|
|
|
export default class PluginFileManager extends Plugin {
|
|
storageType() {
|
|
return process.env.DEFAULT_STORAGE_TYPE;
|
|
}
|
|
|
|
async install() {
|
|
const defaultStorageConfig = getStorageConfig(this.storageType());
|
|
|
|
if (defaultStorageConfig) {
|
|
const Storage = this.db.getCollection('storages');
|
|
if (
|
|
await Storage.repository.findOne({
|
|
filter: {
|
|
name: defaultStorageConfig.defaults().name,
|
|
},
|
|
})
|
|
) {
|
|
return;
|
|
}
|
|
await Storage.repository.create({
|
|
values: {
|
|
...defaultStorageConfig.defaults(),
|
|
type: this.storageType(),
|
|
default: true,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
async load() {
|
|
await this.importCollections(resolve(__dirname, './collections'));
|
|
|
|
this.app.acl.registerSnippet({
|
|
name: `pm.${this.name}.storages`,
|
|
actions: ['storages:*'],
|
|
});
|
|
|
|
this.app.acl.allow('attachments', 'upload', 'loggedIn');
|
|
|
|
this.app.resourcer.use(uploadMiddleware);
|
|
this.app.resourcer.use(createAction);
|
|
this.app.resourcer.registerActionHandler('upload', uploadAction);
|
|
|
|
if (process.env.APP_ENV !== 'production') {
|
|
await getStorageConfig(STORAGE_TYPE_LOCAL).middleware(this.app);
|
|
}
|
|
|
|
const defaultStorageName = getStorageConfig(this.storageType()).defaults().name;
|
|
|
|
this.app.acl.addFixedParams('storages', 'destroy', () => {
|
|
return {
|
|
filter: { 'name.$ne': defaultStorageName },
|
|
};
|
|
});
|
|
|
|
const ownMerger = () => {
|
|
return {
|
|
filter: {
|
|
createdById: '{{ctx.state.currentUser.id}}',
|
|
},
|
|
};
|
|
};
|
|
|
|
this.app.acl.addFixedParams('attachments', 'update', ownMerger);
|
|
this.app.acl.addFixedParams('attachments', 'create', ownMerger);
|
|
this.app.acl.addFixedParams('attachments', 'destroy', ownMerger);
|
|
}
|
|
}
|