import { immutable } from '../decorators'; import { View, Element } from '..'; import permissionService from '../../service/permission'; export class Permission { /** * App Name */ @immutable() public readonly domainName: string = undefined; /** * 上报权限后的资源id */ @immutable() public readonly resourceId: string = undefined; /** * 应用 id */ @immutable() public readonly serviceId: string = undefined; /** * view */ @immutable() public readonly view: View = undefined; /** * element */ @immutable() public readonly element: Element = undefined; /** * @param source 需要合并的部分参数 */ constructor(source?: Partial) { const { domainName } = source; Object.assign(this, source); if (!domainName) { throw new Error('Permission need domainName!'); } } async createDefaultRoleFromRoleName(roleName: string) { if (!roleName) return; return await permissionService.createRole({ body: { name: roleName, serviceId: this.serviceId, }, }); } async updateRoleName(roleId: string, roleName: string) { return await permissionService.updateRole({ body: { id: roleId, name: roleName, serviceId: this.serviceId, } }) } /** * * @param query { * resourceId * roleId * } */ async attachPermissionResource(query: Object) { return await permissionService.attachPermissionResourceAction({ query }); } async detachPermissionResource(query: Object) { return await permissionService.detachPermissionResourceAction({ query }); } async getInitRoles(resourceId: string) { return await permissionService.getRoles({ query: { serviceId: this.serviceId, resourceId, } }); } async attachDevRole(resourceId: string) { const data: any = await this.getInitRoles(resourceId)|| []; let roleId; data.forEach((item: any) => { if (item.name === 'DEV-AdminRole') { roleId = item.id; } }) // 获取权限树资源Id if (roleId) { // 默认角色开启 await this.attachPermissionResource({ resourceId, roleId, }); await this.getInitRoles(resourceId); } } } export default Permission;