133 lines
3.8 KiB
JavaScript
133 lines
3.8 KiB
JavaScript
import role from '../entity/role';
|
|
import orm from '../entity/orm';
|
|
import { eq, asc, inArray, and } from 'drizzle-orm';
|
|
import BizError from '../error/biz-error';
|
|
import rolePerm from '../entity/role-perm';
|
|
import perm from '../entity/perm';
|
|
import { permConst, roleConst } from '../const/entity-const';
|
|
import userService from './user-service';
|
|
|
|
const roleService = {
|
|
|
|
async add(c, params, userId) {
|
|
|
|
let { name, permIds } = params;
|
|
|
|
if (!name) {
|
|
throw new BizError('身份名不能为空');
|
|
}
|
|
|
|
let roleRow = await orm(c).select().from(role).where(eq(role.name, name)).get();
|
|
|
|
if (roleRow) {
|
|
throw new BizError('身份名已存在');
|
|
}
|
|
|
|
roleRow = await orm(c).insert(role).values({...params, userId}).returning().get();
|
|
|
|
if (permIds.length === 0) {
|
|
return;
|
|
}
|
|
|
|
const rolePermList = permIds.map(permId => ({ permId, roleId: roleRow.roleId }));
|
|
|
|
await orm(c).insert(rolePerm).values(rolePermList).run();
|
|
|
|
|
|
},
|
|
|
|
async roleList(c) {
|
|
|
|
const roleList = await orm(c).select().from(role).orderBy(asc(role.sort)).all();
|
|
const permList = await orm(c).select({ permId: perm.permId, roleId: rolePerm.roleId }).from(rolePerm)
|
|
.leftJoin(perm, eq(perm.permId, rolePerm.permId))
|
|
.where(eq(perm.type, permConst.type.BUTTON)).all();
|
|
|
|
roleList.forEach(role => {
|
|
role.permIds = permList.filter(perm => perm.roleId === role.roleId).map(perm => perm.permId);
|
|
});
|
|
|
|
return roleList;
|
|
},
|
|
|
|
async setRole(c, params) {
|
|
|
|
let { name, permIds, roleId } = params;
|
|
|
|
if (!name) {
|
|
throw new BizError('名字不能为空');
|
|
}
|
|
|
|
delete params.isDefault
|
|
|
|
await orm(c).update(role).set({...params}).where(eq(role.roleId, roleId)).run();
|
|
await orm(c).delete(rolePerm).where(eq(rolePerm.roleId, roleId)).run();
|
|
|
|
if (permIds.length > 0) {
|
|
const rolePermList = permIds.map(permId => ({ permId, roleId: roleId }));
|
|
await orm(c).insert(rolePerm).values(rolePermList).run();
|
|
}
|
|
|
|
},
|
|
|
|
async delete(c, params) {
|
|
|
|
const { roleId } = params;
|
|
|
|
const roleRow = await orm(c).select().from(role).where(eq(role.roleId, roleId)).get();
|
|
|
|
if (!roleRow) {
|
|
throw new BizError('身份不存在');
|
|
}
|
|
|
|
if (roleRow.isDefault) {
|
|
throw new BizError('默认身份不能删除');
|
|
}
|
|
|
|
const defRoleRow = await orm(c).select().from(role).where(eq(role.isDefault, roleConst.isDefault.OPEN)).get();
|
|
|
|
await userService.updateAllUserType(c, defRoleRow.roleId, roleId);
|
|
|
|
await orm(c).delete(rolePerm).where(eq(rolePerm.roleId, roleId)).run();
|
|
await orm(c).delete(role).where(eq(role.roleId, roleId)).run();
|
|
|
|
},
|
|
|
|
roleSelectUse(c) {
|
|
return orm(c).select({ name: role.name, roleId: role.roleId }).from(role).orderBy(asc(role.sort)).all();
|
|
},
|
|
|
|
async selectDefaultRole(c) {
|
|
return await orm(c).select().from(role).where(eq(role.isDefault, roleConst.isDefault.OPEN)).get();
|
|
},
|
|
|
|
async setDefault(c, params) {
|
|
const roleRow = await orm(c).select().from(role).where(eq(role.roleId, params.roleId)).get();
|
|
if (!roleRow) {
|
|
throw new BizError('身份不存在');
|
|
}
|
|
await orm(c).update(role).set({ isDefault: 0 }).run();
|
|
await orm(c).update(role).set({ isDefault: 1 }).where(eq(role.roleId, params.roleId)).run();
|
|
},
|
|
|
|
selectById(c, roleId) {
|
|
return orm(c).select().from(role).where(eq(role.roleId, roleId)).get();
|
|
},
|
|
|
|
selectByIdsHasPermKey(c, types, permKey) {
|
|
return orm(c).select({ roleId: role.roleId, sendType: role.sendType, sendCount: role.sendCount }).from(perm)
|
|
.leftJoin(rolePerm, eq(perm.permId, rolePerm.permId))
|
|
.leftJoin(role, eq(role.roleId, rolePerm.roleId))
|
|
.where(and(eq(perm.permKey, permKey), inArray(role.roleId, types))).all();
|
|
},
|
|
|
|
selectByIdsAndSendType(c, permKey, sendType) {
|
|
return orm(c).select({ roleId: role.roleId }).from(perm)
|
|
.leftJoin(rolePerm, eq(perm.permId, rolePerm.permId))
|
|
.leftJoin(role, eq(role.roleId, rolePerm.roleId))
|
|
.where(and(eq(perm.permKey, permKey), eq(role.sendType, sendType))).all();
|
|
}
|
|
};
|
|
|
|
export default roleService;
|