【低代码】单路由权限设计

创建一个全局的响应式权限数据对象:

// globalPermissions.js
import { reactive } from 'vue';

export const globalPermissions = reactive({
  permissionsData: {},
});

在应用启动时从后端获取权限数据并存储到全局响应式对象中:

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import { globalPermissions } from './globalPermissions';

async function fetchPermissionsData() {
  // 模拟从后端获取权限数据的 API 请求
  const response = await fetch('/api/permissions');
  const data = await response.json();

  // 将获取到的权限数据存储在全局响应式对象中
  globalPermissions.permissionsData = data;
}

// 在应用启动时获取权限数据
fetchPermissionsData().then(() => {
  const app = createApp(App);
  app.provide('globalPermissions', globalPermissions);
  app.mount('#app');
});

在您的页面组件中使用 inject 函数来访问全局权限数据:

<template>
  <div>
    <!-- 动态加载子组件 -->
    <component :is="currentComponent"></component>

    <!-- 根据权限渲染按钮 -->
    <button v-if="hasPermission('add')">添加</button>
    <button v-if="hasPermission('edit')">编辑</button>
    <button v-if="hasPermission('delete')">删除</button>
  </div>
</template>

<script>
import { inject, computed } from 'vue';
import Page1 from './Page1.vue';
import Page2 from './Page2.vue';

export default {
  props: ['code'],
  setup(props) {
    // 从全局响应式对象中获取权限数据
    const globalPermissions = inject('globalPermissions');
    const permissionsData = globalPermissions.permissionsData;

    // 根据 code 动态加载子组件
    const components = { page1: Page1, page2: Page2 };
    const currentComponent = computed(() => components[props.code]);

    // 检查按钮权限
    function hasPermission(permission) {
      const permissions = permissionsData[props.code];
      return permissions && permissions.includes(permission);
    }

    return { currentComponent, hasPermission };
  },
};
</script>

您可以根据每个菜单项的 code 来管理权限,同时在浏览器打开多个页面时不会混淆权限。刷新页面时,由于全局响应式对象会保留权限数据,因此不会影响其他页面的权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值