瀏覽代碼

feat: 收敛路由权限中数据权限的逻辑,减少侵入性配置

lanjianrong 4 年之前
父節點
當前提交
c4fc731529
共有 2 個文件被更改,包括 19 次插入20 次删除
  1. 8 15
      config/routes.js
  2. 11 5
      src/access.ts

+ 8 - 15
config/routes.js

@@ -52,24 +52,21 @@ export default [
         name: 'client',
         icon: 'icon-kehu2',
         component: './Customer/Client',
-        access: 'authRouteFilter',
-        validatePerm: true
+        access: 'authRouteFilterWithPerm'
       },
       {
         path: '/customer/company',
         name: 'company',
         icon: 'icon-danwei',
         component: './Customer/Company',
-        access: 'authRouteFilter',
-        validatePerm: true
+        access: 'authRouteFilterWithPerm'
       },
       {
         path: '/customer/business',
         name: 'business',
         icon: 'icon-shangji',
         component: './Customer/Business',
-        access: 'authRouteFilter',
-        validatePerm: true
+        access: 'authRouteFilterWithPerm'
       },
       {
         path: '/customer/test',
@@ -101,8 +98,7 @@ export default [
             path: '/product/lock/lockstore',
             name: 'lockstore',
             component: './Product/Lock/LockStore',
-            access: 'authRouteFilter',
-            validatePerm: true
+            access: 'authRouteFilterWithPerm'
           }
           // {
           //   path: '/product/lock/lockcount',
@@ -166,7 +162,7 @@ export default [
             name: 'enterprise',
             component: './Product/Road/Enterprise',
             access: 'authRouteFilter'
-            // validatePerm: true
+            //
           }
         ]
       }
@@ -194,22 +190,19 @@ export default [
             path: '/statistic/product/usage',
             name: 'usage',
             component: './Statistic/Product/SoftwareUsage',
-            access: 'authRouteFilter',
-            validatePerm: true
+            access: 'authRouteFilterWithPerm'
           },
           {
             path: '/statistic/product/aggregate',
             name: 'aggregate',
             component: './Statistic/Product/InvoiceAggregate',
-            access: 'authRouteFilter',
-            validatePerm: true
+            access: 'authRouteFilterWithPerm'
           },
           {
             path: '/statistic/product/trends',
             name: 'trends',
             component: './Statistic/Product/InvoiceTrends',
-            access: 'authRouteFilter',
-            validatePerm: true
+            access: 'authRouteFilterWithPerm'
           },
           {
             path: '/statistic/product/receivables',

+ 11 - 5
src/access.ts

@@ -1,10 +1,11 @@
 import { TagDataType } from './pages/Customer/Company/components/PersonLabel/const'
 
-// eslint-disable-next-line func-names
 export default function (initialState) {
   const { roles = [], currentUser = {}, permData = {} } = initialState || {}
 
+  // 数据权限-路由鉴权
   const authPermDataFilter = route => {
+    // TODO: 对于数据数据是否管理员就放行?
     if (currentUser.isAdmin) {
       return true
     }
@@ -16,26 +17,30 @@ export default function (initialState) {
     return false
   }
 
+  // 角色权限-路由鉴权
   const authRouteFilter = route => {
     if (currentUser.isAdmin) {
       return true
     }
     if (roles.filter(r => r.endsWith('_access')).includes(`${route.name}_access`)) {
-      if (route.validatePerm) {
-        return authPermDataFilter(route)
-      }
       return true
     }
     return false
   }
 
-  /** 协作标签 */
+  // 数据权限、角色权限同时鉴权
+  const authRouteFilterWithPerm = route => {
+    return authRouteFilter(route) && authPermDataFilter(route)
+  }
+
+  /** 协作标签鉴权 */
   const canEditTag = (type: TagDataType): boolean => {
     if (type === TagDataType.CLIENT) return roles.includes('client_edit_team_tags')
     if (type === TagDataType.COMPANY) return roles.includes('company_edit_team_tags')
     return false
   }
 
+  /** 具体单一鉴权 */
   const validatePermByType = (type: string): boolean => {
     return roles.includes(type)
   }
@@ -43,6 +48,7 @@ export default function (initialState) {
   return {
     authRouteFilter,
     authPermDataFilter,
+    authRouteFilterWithPerm,
     canEditTag,
     validatePermByType
   }