tachybase_todo/packages/plugins/acl/src/actions/role-collections.ts

56 lines
1.6 KiB
TypeScript
Raw Normal View History

import { Database } from '@nocobase/database';
type UsingConfigType = 'strategy' | 'resourceAction';
const roleCollectionsResource = {
name: 'roles.collections',
actions: {
async list(ctx, next) {
const role = ctx.action.params.associatedIndex;
const db: Database = ctx.db;
const collectionRepository = db.getRepository('collections');
// all collections
2022-03-02 18:35:49 +08:00
const collections = await collectionRepository.find({
filter: ctx.action.params.filter,
});
// role collections
const roleResources = await db.getRepository('rolesResources').find({
filter: {
roleName: role,
},
});
// role collections
const roleResourcesNames = roleResources.map((roleResource) => roleResource.get('name'));
const roleResourceActionResourceNames = roleResources
.filter((roleResources) => roleResources.get('usingActionsConfig'))
.map((roleResources) => roleResources.get('name'));
ctx.body = collections
.map((collection) => {
const exists = roleResourcesNames.includes(collection.get('name'));
const usingConfig: UsingConfigType = roleResourceActionResourceNames.includes(collection.get('name'))
? 'resourceAction'
: 'strategy';
return {
name: collection.get('name') as string,
title: collection.get('title') as string,
2022-02-18 20:26:50 +08:00
roleName: role,
usingConfig,
exists,
};
})
.sort((a, b) => (a.name > b.name ? 1 : -1));
2022-02-11 23:59:03 +08:00
await next();
},
},
};
export { roleCollectionsResource };