permission.ts 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { router } from "@/router";
  2. import { permission } from "@/store/permission";
  3. import { DataScope, RoleLevel, roleLevel } from "@/store/role";
  4. import { Scene } from "@/store/scene";
  5. import { user } from "@/store/user";
  6. import { App } from "vue";
  7. // 操作某个场景 查看是否有权限
  8. export const operateIsPermissionByScene = (scene: Scene) => {
  9. return true;
  10. // return (
  11. // [RoleLevel.admin, RoleLevel.systemAdmin].includes(roleLevel.value) ||
  12. // user.value.info.cameraSns.includes(scene.snCode)
  13. // );
  14. };
  15. // 查看某个操作是否有权限
  16. export const operateIsPermissionByPath = (...operate: string[]) => {
  17. // if (import.meta.env.DEV) {
  18. // return true;
  19. // }
  20. const routeName = router.currentRoute.value.name as string;
  21. const currentRoleName = `${routeName}:${operate.join(":")}`;
  22. return permission.value.find((item) => item.resourceKey === currentRoleName);
  23. };
  24. // 查看某个数据操作是否有权限操作
  25. export const operateIsPermissionByDept = (data: any[]) => {
  26. const permission = operateIsPermissionByPath(...data.slice(1));
  27. if (!permission) {
  28. return false;
  29. } else {
  30. // 4 5 只有相同depId才能操作
  31. const sameDeptScopes = [DataScope.personCreate, DataScope.selfInner];
  32. return (
  33. !sameDeptScopes.includes((permission as any).dataScope) ||
  34. data[0].deptId === user.value.info.deptId
  35. );
  36. }
  37. };
  38. const argsCover = (value: string | string[] | string[][]): string[][] => {
  39. if (!Array.isArray(value)) {
  40. return [[value]];
  41. } else if (value.length > 0 && !Array.isArray(value[0])) {
  42. return [value as string[]];
  43. } else {
  44. return value as string[][];
  45. }
  46. };
  47. export const permissionSetup = (app: App) => {
  48. app.directive("pscene", (el, binding) => {
  49. const value = argsCover(binding.value) as any;
  50. value.every((data: any[]) => operateIsPermissionByScene(data[0])) ||
  51. (el.parentNode && el.parentNode.removeChild(el));
  52. });
  53. app.directive("pdscene", (el, binding) => {
  54. const value = argsCover(binding.value) as any;
  55. value.every((data: any[]) => operateIsPermissionByScene(data[0])) ||
  56. el.classList.add("disable");
  57. });
  58. app.directive("ppath", (el, binding) => {
  59. const value = argsCover(binding.value) as any;
  60. value.every((data: any) => operateIsPermissionByPath(...data)) ||
  61. (el.parentNode && el.parentNode.removeChild(el));
  62. });
  63. app.directive("pdpath", (el, binding) => {
  64. const value = argsCover(binding.value) as any;
  65. value.every((data: any) => operateIsPermissionByPath(...data)) ||
  66. el.classList.add("disable");
  67. });
  68. app.directive("pdept", (el, binding) => {
  69. const value = argsCover(binding.value) as any;
  70. value.every(operateIsPermissionByDept) ||
  71. (el.parentNode && el.parentNode.removeChild(el));
  72. });
  73. app.directive("pddept", (el, binding) => {
  74. const value = argsCover(binding.value) as any;
  75. value.every(operateIsPermissionByDept) || el.classList.add("disable");
  76. });
  77. };