张涛 пре 1 година
родитељ
комит
3a6090d25a
2 измењених фајлова са 48 додато и 10 уклоњено
  1. 33 6
      src/directive/hasPermi/index.js
  2. 15 4
      src/utils/permission.js

+ 33 - 6
src/directive/hasPermi/index.js

@@ -1,13 +1,40 @@
 import { localST_UserInfo } from '../../base/storage';
 
 function hasPermissionDirective(el, binding) {
-  // 获取用户权限
-  const { permissions } = JSON.parse(localST_UserInfo.getItem());
+  try {
+    // 确保 localST_UserInfo 和 getItem 方法存在
+    if (typeof localST_UserInfo === 'undefined' || typeof localST_UserInfo.getItem !== 'function') {
+      console.error('localST_UserInfo 或 getItem 方法未定义');
+      return;
+    }
 
-  // 获取按钮权限
-  const btnPermission = binding.value;
-  if (!permissions.includes('*:*:*') && !permissions.includes(btnPermission)) {
-    el.style.display = 'none';
+    // 尝试解析用户权限
+    const userPermissions = localST_UserInfo.getItem();
+    if (typeof userPermissions !== 'string') {
+      console.error('用户权限不是字符串格式');
+      return;
+    }
+    const permissions = JSON.parse(userPermissions);
+
+    // 确保 permissions 是数组类型
+    if (!Array.isArray(permissions)) {
+      console.error('权限不是数组格式');
+      return;
+    }
+
+    // 获取按钮权限
+    const btnPermission = binding.value;
+    if (btnPermission === undefined) {
+      console.error('按钮权限未定义');
+      return;
+    }
+
+    // 检查权限
+    if (!permissions.includes('*:*:*') && !permissions.includes(btnPermission)) {
+      el.style.display = 'none';
+    }
+  } catch (error) {
+    console.error('hasPermissionDirective 中发生错误:', error);
   }
 }
 

+ 15 - 4
src/utils/permission.js

@@ -2,11 +2,22 @@ import { localST_UserInfo, localST_RoutesList } from '../base/storage';
 
 // 判断是否有该权限
 export const hasPermission = (str) => {
-  const { permissions } = JSON.parse(localST_UserInfo.getItem());
-  if (permissions.includes('*:*:*')) return true;
-  return permissions.includes(str);
-};
+  try {
+    const userInfo = localST_UserInfo.getItem();
+    if (!userInfo) return false;
+
+    const parsedUserInfo = JSON.parse(userInfo);
+    if (!parsedUserInfo || !Array.isArray(parsedUserInfo.permissions)) return false;
+
+    if (parsedUserInfo.permissions.includes('*:*:*')) return true;
 
+    return parsedUserInfo.permissions.includes(str);
+  } catch (error) {
+    // 捕获任何异常,比如 JSON 解析错误,并返回 false
+    console.error('错误信息:', error);
+    return false;
+  }
+};
 export const formatRoutes = (data) => {
   const routes = [];