tachybase_todo/packages/plugin-permissions/src/actions/roles.collections.ts

86 lines
1.9 KiB
TypeScript
Raw Normal View History

import { actions } from '@nocobase/actions';
export async function list(ctx: actions.Context, next: actions.Next) {
// TODO: 暂时 action 中间件就这么写了
ctx.action.mergeParams({associated: null});
return actions.common.list(ctx, next);
}
export async function get(ctx: actions.Context, next: actions.Next) {
const {
resourceKey,
associated
} = ctx.action.params;
const [permission] = await associated.getPermissions({
where: {
collection_name: resourceKey
},
include: [
{
association: 'actions_permissions',
// 对 hasMany 关系可以进行拆分查询,避免联表过多标识符超过 PG 的 64 字符限制
separate: true,
include: [
{
association: 'scope',
attribute: ['filter']
},
]
},
{
association: 'fields_permissions',
separate: true,
}
],
limit: 1
});
const result = permission
? {
actions: permission.actions_permissions || [],
fields: permission.fields_permissions || [],
tabs: permission.tabs_permissions || [],
}
: {
actions: [],
fields: [],
tabs: []
};
ctx.body = result;
await next();
}
export async function update(ctx: actions.Context, next: actions.Next) {
const {
resourceKey,
associated,
values
} = ctx.action.params;
let [permission] = await associated.getPermissions({
where: {
collection_name: resourceKey
}
});
if (!permission) {
permission = await associated.createPermission({
collection_name: resourceKey,
description: values.description
});
} else {
await permission.update({ description: values.description });
}
await permission.updateAssociations({
actions_permissions: values.actions,
fields_permissions: values.fields,
tabs: values.tabs
});
ctx.body = permission;
await next();
}