chore: add import export permission to admin & member user (#4809)

* chore: add import export permission to admin & member user

* fix: test
This commit is contained in:
ChengLei Shao
2024-07-04 17:32:52 +08:00
committed by GitHub
parent 31b7a3f4b9
commit fbfbcdeb2c
5 changed files with 99 additions and 2 deletions
@@ -381,7 +381,7 @@ export class PluginACLServer extends Plugin {
name: 'member',
title: '{{t("Member")}}',
allowNewMenu: true,
strategy: { actions: ['view', 'update:own', 'destroy:own', 'create', 'importXlsx', 'export'] },
strategy: { actions: ['view', 'update:own', 'destroy:own', 'create'] },
default: true,
snippets: ['!ui.*', '!pm', '!pm.*'],
},
@@ -0,0 +1,22 @@
import { createMockServer, MockServer } from '@nocobase/test';
describe('acl', () => {
let app: MockServer;
beforeEach(async () => {
app = await createMockServer({
plugins: ['nocobase'],
});
});
afterEach(async () => {
await app.destroy();
});
it('should add export action to default role strategy', async () => {
const roles = ['admin', 'member'];
for (const roleName of roles) {
const role = app.acl.getRole(roleName);
expect(role.strategy['actions']).toContain('export');
}
});
});
@@ -11,7 +11,34 @@ import { Plugin } from '@nocobase/server';
import { exportXlsx } from './actions';
export class PluginActionExportServer extends Plugin {
beforeLoad() {}
beforeLoad() {
this.app.on('afterInstall', async () => {
if (!this.app.db.getRepository('roles')) {
return;
}
const roleNames = ['admin', 'member'];
const roles = await this.app.db.getRepository('roles').find({
filter: {
name: roleNames,
},
});
for (const role of roles) {
await this.app.db.getRepository('roles').update({
filter: {
name: role.name,
},
values: {
strategy: {
...role.strategy,
actions: [...role.strategy.actions, 'export'],
},
},
});
}
});
}
async load() {
this.app.dataSourceManager.afterAddDataSource((dataSource) => {
@@ -0,0 +1,22 @@
import { createMockServer, MockServer } from '@nocobase/test';
describe('acl', () => {
let app: MockServer;
beforeEach(async () => {
app = await createMockServer({
plugins: ['nocobase'],
});
});
afterEach(async () => {
await app.destroy();
});
it('should add importXlsx action to default role strategy', async () => {
const roles = ['admin', 'member'];
for (const roleName of roles) {
const role = app.acl.getRole(roleName);
expect(role.strategy['actions']).toContain('importXlsx');
}
});
});
@@ -17,6 +17,32 @@ export class PluginActionImportServer extends Plugin {
beforeLoad() {
this.app.i18n.addResources('zh-CN', namespace, zhCN);
this.app.i18n.addResources('en-US', namespace, enUS);
this.app.on('afterInstall', async () => {
if (!this.app.db.getRepository('roles')) {
return;
}
const roleNames = ['admin', 'member'];
const roles = await this.app.db.getRepository('roles').find({
filter: {
name: roleNames,
},
});
for (const role of roles) {
await this.app.db.getRepository('roles').update({
filter: {
name: role.name,
},
values: {
strategy: {
...role.strategy,
actions: [...role.strategy.actions, 'importXlsx'],
},
},
});
}
});
}
async load() {