diff --git a/packages/plugin-permissions/src/AccessController.ts b/packages/plugin-permissions/src/AccessController.ts index f5dce2bd8..30789612a 100644 --- a/packages/plugin-permissions/src/AccessController.ts +++ b/packages/plugin-permissions/src/AccessController.ts @@ -155,6 +155,10 @@ export default class AccessController { + const [Collection, Permission] = this.context.db.getModels(['collections', 'permissions']); + const isRoot = await this.isRoot(); + if (isRoot) { + const collections = await Collection.findAll(); + return collections.map(collection => collection.name); + } + const roles = await this.getRoles(); + const permissions = await Permission.findAll({ + where: { + role_id: roles.map(role => role.id), + } + }); + return permissions.map(permission => permission.collection_name); + } + async isRoot(): Promise { const { context } = this; const { currentUser } = context.state; @@ -215,16 +235,13 @@ export default class AccessController { + const { resourceName } = ctx.action.params; + if (resourceName === 'action_logs' && !await ctx.ac.isRoot()) { + const collections = await ctx.ac.getCollections(); + ctx.action.mergeParams({ + filter: { + 'collection_name.in': collections + }, + }); + } + await next(); + }); } injection = async (ctx, next) => {