瀏覽代碼

fix🐛: 添加权限功能

gitboyzcf 5 天之前
父節點
當前提交
33e81f08c9
共有 2 個文件被更改,包括 64 次插入3 次删除
  1. 43 0
      src/directives/modules/auth.js
  2. 21 3
      src/stores/modules/system.js

+ 43 - 0
src/directives/modules/auth.js

@@ -0,0 +1,43 @@
+/**
+ * @Description: 权限控制
+ * @Author zcf
+ * @Date 2024-02-07 16:57
+ * @E-mail boyzcf@qq.com
+ */
+
+import { useOutsideSystemStore } from '@/stores/modules/system.js'
+const useSystem = useOutsideSystemStore()
+
+export default {
+  mounted(el, { value }) {
+    // 获取用户的所有权限列表
+    const permissions = useSystem.permissions || []
+
+    if (Array.isArray(value)) {
+      if (!value.length) return
+
+      // 检查是否有任意一个权限匹配
+      const hasPermission = value.some((permission) => permissions.includes(permission))
+
+      // 如果没有权限,则移除元素
+      if (!hasPermission) {
+        el.parentNode?.removeChild(el)
+      }
+    } else {
+      console.error(new Error('v-auth自定义指令需要传入数组!!!'))
+    }
+  }
+
+  // updated(el, { value }) {
+  //   // 在组件更新时也执行相同的权限检查
+  //   const permissions = useSystem.privilegesList || []
+
+  //   if (Array.isArray(value)) {
+  //     const hasPermission = value.some((permission) => permissions.includes(permission))
+
+  //     if (!hasPermission) {
+  //       el.parentNode?.removeChild(el)
+  //     }
+  //   }
+  // }
+}

+ 21 - 3
src/stores/modules/system.js

@@ -38,7 +38,8 @@ export const useSystemStore = defineStore('systemStore', {
     partObj: {}, //细节X Y
     ratio: 0, //全景比例
     alarmList: [], // 告警列表
-    alarmCount: 0 // 告警数量
+    alarmCount: 0, // 告警数量
+    permissions: [] // 权限
   }),
   getters: {
     ipF() {
@@ -103,7 +104,6 @@ export const useSystemStore = defineStore('systemStore', {
       const useHomeStore = useOutsideHomeStore()
       const notification = useNotification()
       const alarmModel = useModal()
-      let flag = true
 
       // setInterval(() => {
       //   const data = {
@@ -142,11 +142,12 @@ export const useSystemStore = defineStore('systemStore', {
       // let websocket
       let that = this
       ;(() => {
+        console.log('mqtt连接中...')
         let client = mqtt.connect('/mqtt', {
           host: this.ipF.split('/api')[0].split(':')[0],
           defaultProtocol: 'ws',
           protocol: 'ws',
-          port: 8083
+          port: 9010
         })
         client.on('connect', () => {
           console.log('mqtt连接成功')
@@ -289,6 +290,23 @@ export const useSystemStore = defineStore('systemStore', {
       )
       const res = await API_MR_STREAMS_GET(d)
       return res
+    },
+    // 获取我的权限
+    getPermissions() {
+      const { API_RO_GET } = useRequest()
+      return new Promise((resolve, reject) => {
+        const parentUID =
+          storage.cookie.get(window.top.document, 'Admin-UID') ||
+          storage.cookie.get(window, 'Admin-UID')
+        API_RO_GET({ userId: parentUID }).then((res) => {
+          if (!res) {
+            reject(new Error('权限获取失败'))
+          }
+
+          this.permissions = res.map((item) => item.resource_id + item.operation)
+          resolve(res.permissions)
+        })
+      })
     }
   }
 })