admin.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. const adminService = require('../service/admin');
  2. const projectService = require('../service/projects.service');
  3. const userService = require('../service/project.user.service');
  4. const roleService = require('../service/roles.service');
  5. const pagesRoleService = require('../service/pagesRole.service');
  6. const util = require('../utils/util');
  7. // 项目配置
  8. async function getProjectConfig(ctx) {
  9. const { projectId } = ctx.request.query;
  10. if (!util.isNumber(projectId)) {
  11. return ctx.throw(400, '项目ID不能为空');
  12. }
  13. const { userId } = util.decodeToken(ctx);
  14. const info = await adminService.getProjectConfig(projectId);
  15. if (!info?.length) {
  16. return util.fail(ctx, '当前项目不存在', 404);
  17. }
  18. if (info[0].isTemplate === 1) {
  19. return util.success(ctx, info?.[0] || {});
  20. }
  21. // 私有项目且当前登录人不是创建人,则需要进一步判断当前用户是否为开发者
  22. if (info[0].isPublic === 2 && info[0].userId !== userId) {
  23. // 创建用户相当于系统超级管理员
  24. const user = await userService.getUserRole(userId, projectId);
  25. if (!user) {
  26. return util.fail(ctx, '您当前暂无访问权限', '10001');
  27. }
  28. }
  29. util.success(ctx, info?.[0] || {});
  30. }
  31. // 页面详情
  32. async function getPageDetail(ctx) {
  33. const { projectId } = ctx.request.query;
  34. const { id, env } = ctx.request.params;
  35. if (!util.isNumber(id)) {
  36. return ctx.throw(400, '页面ID不能为空');
  37. }
  38. if (!util.isNumber(projectId)) {
  39. return ctx.throw(400, '项目ID不能为空');
  40. }
  41. if (!util.checkEnv(env)) {
  42. return ctx.throw(400, '环境参数不能为空');
  43. }
  44. // 单独访问页面时,需要判断权限:公开页面或拥有开发者和体验者权限
  45. let [pageInfo] = await adminService.getPageDetailById(id);
  46. if (!pageInfo) {
  47. return util.fail(ctx, '当前页面不存在', 404);
  48. }
  49. console.log('info', pageInfo);
  50. // 如果项目ID为空,则判断改页面是否公开或私有,私有页面需要登录才可访问,公开页面无需登录
  51. if (pageInfo.isTemplate == 0 && (!projectId || projectId === '0') && pageInfo.isPublic === 2) {
  52. const { userId } = util.decodeToken(ctx);
  53. // 需要判断用户是否是开发者或体验者;
  54. if (pageInfo.userId !== userId) {
  55. // 查询页面开发者
  56. const list = await pagesRoleService.getPagesRoleList([id, pageInfo.projectId].join(','));
  57. // 如果不是创建者,又不是开发者,无法访问
  58. if (list.filter((item) => item.userId === userId).length === 0) {
  59. return util.fail(ctx, '您当前暂无查看权限', 403);
  60. }
  61. }
  62. }
  63. if (pageInfo) {
  64. const lastPublishId = pageInfo[`${env}PublishId`];
  65. if (lastPublishId > 0) {
  66. const pageId = pageInfo.id;
  67. const [result] = await adminService.getLastPublishInfo(pageId, lastPublishId);
  68. util.success(ctx, { ...result, projectId: pageInfo.projectId });
  69. } else {
  70. util.fail(ctx, '当前页面未发布', 500);
  71. }
  72. }
  73. }
  74. async function getProjectList(ctx) {
  75. const { pageNum, pageSize } = ctx.request.query;
  76. const { userId } = util.decodeToken(ctx);
  77. const { total } = await projectService.getCategoryCount('', userId);
  78. if (total === 0) {
  79. util.success(ctx, {
  80. list: [],
  81. total: 0,
  82. pageSize: +pageSize,
  83. pageNum: +pageNum,
  84. });
  85. }
  86. const list = await projectService.getCategoryList(pageNum || 1, pageSize || 12, '', userId);
  87. util.success(ctx, {
  88. list,
  89. total,
  90. pageSize: +pageSize,
  91. pageNum: +pageNum,
  92. });
  93. }
  94. // 菜单列表
  95. async function getMenuList(ctx) {
  96. const { id } = ctx.request.params;
  97. if (!util.isNumber(id)) {
  98. return ctx.throw(400, '项目ID不能为空');
  99. }
  100. const { userId } = util.decodeToken(ctx);
  101. const project = await adminService.getProjectConfig(id);
  102. // 判断项目是否存在
  103. if (project.length > 0) {
  104. // 判断项目是否公开或者模板
  105. if (project[0].isPublic === 1 || project[0].isTemplate === 1) {
  106. const menuList = await adminService.getAllMenuList(id);
  107. util.success(ctx, { list: menuList });
  108. } else {
  109. // 创建用户相当于系统超级管理员
  110. if (project[0].userId === userId) {
  111. const menuList = await adminService.getAllMenuList(id);
  112. util.success(ctx, { list: menuList });
  113. } else {
  114. const user = await userService.getUserRole(userId, id);
  115. if (!user) {
  116. return util.fail(ctx, '您当前暂无访问权限', '10001');
  117. }
  118. // 管理员返回全部菜单
  119. if (user.systemRole === 1) {
  120. const menuList = await adminService.getAllMenuList(id);
  121. util.success(ctx, { list: menuList });
  122. } else {
  123. // 根据用户角色查询对应菜单列表
  124. const { id, checked = '', halfChecked = '' } = await roleService.getRoleInfo(user.roleId);
  125. let menuIds = [];
  126. if (checked) {
  127. menuIds = menuIds.concat(checked.split(','));
  128. }
  129. if (halfChecked) {
  130. menuIds = menuIds.concat(halfChecked.split(','));
  131. }
  132. if (menuIds.length === 0) {
  133. util.success(ctx, { list: [] });
  134. } else {
  135. const menuList = await adminService.getMenuList(menuIds.join(', '), id);
  136. util.success(ctx, { list: menuList });
  137. }
  138. }
  139. }
  140. }
  141. } else {
  142. util.success(ctx, { list: [] });
  143. }
  144. }
  145. module.exports = {
  146. getProjectConfig,
  147. getPageDetail,
  148. getProjectList,
  149. getMenuList,
  150. };