这样在管理后台里实现 403 页面实在是太优雅了

前言

403 页面通常表示无权限访问,与 404 页面代表着不同含义。而大部分管理后台框架仅提供了 404 页面的支持,但却忽略了对 403 页面的处理,有的框架虽然也有对 403 页面的处理,但处理效果却不尽人意。

那怎么样的 403 页面才是即好用,又优雅呢?

其他框架是怎么做的

1、完全不处理

不处理的结果就是无访问权限的页面大概率会进入 404 页面的逻辑。

因为这类框架通常在路由注册前就把无访问权限的路由直接剔除了,所以当用户访问了一个无访问权限的路由,对系统来说,它就是一个不存在的路由,从而进入到 404 页面。

那弊端是什么呢?那就是用户没办法区分他想访问的这个页面,到底是因为权限不够,还是地址错误,会给用户造成一定的使用困惑。

2、稍稍处理

稍稍处理的方式和第一种思路不太一样,这类框架在路由注册前并不会对路由数据做处理,而是在路由导航守卫里去判断是否有权限访问路由,如果没有权限则进入到预先注册好的 403 页面地址。

这种方案的优势在于它区分了 404 和 403 页面,因为即便是无访问权限的路由,也是真实注册到了路由实例上,只是在访问时做了鉴权和重定向。

那弊端又是什么呢?那就是用户虽然知道了当前页面无访问权限,但却看不到页面的真实地址,因为已经被重定向到 403 页面上了,用户体验稍微欠缺了一点,就像下图这样:

111.gif

我是怎么做的

先稍微思考一下方案,首先刚才第一种方案剔除无访问权限的路由肯定不行,无访问权限的路由必须得注册,这样才能和 404 页面做出区分;其次第二种方案在导航守卫里做重定向也不行,不能重定向,要保证路由地址还是原来的地址,但页面要展示 403 页面的内容。

于是,方案就出来了,那就是 在路由注册前,将无访问权限的路由的 component 直接替换成 403 页面组件 不就可以了么。这么一来,路由还是那个路由,只是对应的页面组件不一样了,既区分了 404 和 403 页面,还保留 403 页面的原始路由地址。

用代码来描述大致就是:

// 原始路由数据
[
  {
    path: '/permission',
    component: () => import('@/layouts/index.vue'),
    children: [
      {
        path: 'index',
        component: () => import('@/views/list1.vue'),
        meta: {
          auth: 'admin' // 鉴权字段,如果为 admin 时则可以访问
        }
      }
    ]
  }
]

// 假设用户权限为 test ,处理过后的路由数据
[
  {
    path: '/permission',
    component: () => import('@/layouts/index.vue'),
    children: [
      {
        path: 'index',
        component: () => import('@/views/403.vue'), // 注意看这里,替换成了 403 页面组件
        meta: {
          auth: 'admin'
        }
      }
    ]
  }
]

实际效果就是这样:

Kapture 2023-02-26 at 00.13.57.gif

可以看到,当账号从 admin 切换到 test 后,由于 test 账号不具备访问权限,所以页面显示为 403 页面,与此同时,页面的 URL 地址依旧还是原始的地址,达到了预期的效果。

这就够了么?

当然没有,因为 404 页面是通过以下方式做的兜底处理:

{
  path: '/:all(.*)*',
  component: () => import('@/views/404.vue')
}

由于它并不是一个多级路由的结构,这就导致 404 页面和 403 页面的展示有一点差别,404 页面是整页显示,403 页面是局部显示:

222.gif

而我希望是能和 404 页面保持一致,也就是让 403 页面也进行整屏显示。

处理起来也不复杂,无非是在路由注册前,将无访问权限的多级路由转成一级路由就可以啦,当然处理过程会使用到递归,以及需要将多级路由的 path 进行合并,从代码来描述大致就是这样:

// 原始路由数据
[
  {
    path: '/permission',
    component: () => import('@/layouts/index.vue'),
    children: [
      {
        path: 'index',
        component: () => import('@/views/list1.vue'),
        meta: {
          auth: 'admin' // 鉴权字段,如果为 admin 时则可以访问
        }
      }
    ]
  }
]

// 假设用户权限为 test ,处理过后的路由数据
[
  {
    path: '/permission/index', // 注册看这里,将多级路由的 path 合并成一级
    component: () => import('@/layouts/403.vue'),
    meta: {
      auth: 'admin'
    }
  }
]

最终效果如下:

333.gif

总结

403 页面是个重要程度并不那么高的功能,对于一般框架来说,文章一开始提到了两个方案都可以做到「让权限不足的用户禁止访问页面」的需求。

而我的方案则是在满足使用需求的前提下,尽可能优化用户体验,虽然没有提供实际的代码,但相信看到这的大家应该都能理解,可以在业务中去自行实践下。

至于优雅么?至少目前我觉得在同类产品里,还是挺优雅的😌

其他

我在研究上面第2个方案示例图里的那个框架时发现,它切换账号时不会刷新页面,体验还挺丝滑的。

当然这得益于它所选的方案,因为路由不需要随着用户权限或账号的变化而变化,所以也就不需要通过刷新页面或者重新登录的方式去更新路由。

或许我还能再优化优化,让这个方案再优雅一点?如果你有好的建议,也可以在下面留言讨论下。

最后

如果你对文章中我的这款 Fantastic-admin 框架感兴趣,可以点这里了解一下,这是一款『开箱即用,能为你提供舒适开发体验』的管理系统框架。

同时文章中我的方案也已经集成进了框架中,想了解实际代码是如何实现的,也可以通过阅读源码了解。


以下是我往期写的一些关于管理后台的文章,感兴趣可以继续阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue是一种流行的前端框架,可以用于开发各种类型的网站和应用程序。对于购物网站卖家后台管理页面实现,Vue可以提供以下功能和特性: 1. 数据双向绑定:Vue使用MVVM架构,通过数据绑定使页面的数据和状态保持同步。这对于卖家后台管理页面非常重要,因为卖家需要实时更新商品信息和订单状态。 2. 组件化开发:Vue将页面拆分为多个可复用的组件,这样可以提高代码的维护性和可扩展性。例如,可以将商品列表、订单管理和用户管理等模块分别开发成独立的组件。 3. 路由管理:Vue的路由模块可以帮助实现页面间的导航和路由跳转。对于卖家后台管理页面,可以通过路由管理实现不同页面之间的切换和权限控制。 4. 状态管理:Vue的状态管理工具Vuex可以帮助在应用程序中共享和管理全局状态。在卖家后台管理页面中,可以使用Vuex来管理登录状态、订单状态和商品状态等。 5. 异步请求:Vue可以与后端API进行交互,使用Axios等插件发送异步请求并处理响应数据。这对于卖家后台管理页面的数据获取和更新非常重要。 6. UI组件库:Vue有许多优秀的UI组件库,如Element UI和Vuetify,可以快速搭建美观的用户界面。这对于卖家后台管理页面的设计和开发非常有帮助。 总之,使用Vue可以方便地实现购物网站卖家后台管理页面,提供了数据绑定、组件化开发、路由管理、状态管理、异步请求和丰富的UI组件库等功能。这使得开发人员可以高效地开发出功能齐全、易于维护的卖家后台管理页面。 ### 回答2: Vue实现购物网站卖家后台管理页面需要以下步骤: 1. 确定页面需求:首先需要确定页面需要展示哪些功能和信息,比如订单管理、商品管理、库存管理、销售统计等等。 2. 搭建项目环境:使用Vue脚手架工具(如Vue CLI)搭建项目,创建基本的文件结构和配置。 3. 设计数据模型:根据页面需求,设计相应的数据模型,并与后端进行接口的对接。 4. 编写组件:根据页面需求,将页面划分为不同的组件,比如订单管理组件、商品管理组件等等。使用Vue的单文件组件来编写组件,包括HTML模板、JavaScript逻辑以及CSS样式。 5. 数据绑定与展示:利用Vue的数据绑定功能,将数据与组件进行关联,并通过指令和表达式在页面中展示数据。 6. 实现页面交互:通过Vue的事件绑定和方法调用,实现页面上的交互功能,比如点击按钮进行相应的操作。 7. 路由配置:使用Vue Router进行路由配置,实现页面间的跳转和切换。 8. 状态管理:使用Vuex进行状态管理,方便不同组件之间的数据共享和管理。 9. 样式设计:使用CSS和预处理器(如Less、Sass)进行样式的设计和布局。 10. 调试与优化:进行页面的调试和性能优化,保证页面流畅和稳定。 最后,通过打包工具(如Webpack)将整个项目打包成静态文件,并部署到服务器上,从而实现购物网站卖家后台管理页面的功能。 ### 回答3: Vue可以很好地实现购物网站卖家后台管理页面。首先,我们可以利用Vue的单文件组件架构来创建多个可复用的组件,提高代码的可维护性和复用性。 在卖家后台管理页面中,我们可以通过Vue的路由功能来管理不同页面的跳转和展示。通过Vue Router可以很方便地定义页面的路由路径,并且可以添加权限控制,确保只有授权的卖家才能访问后台管理页面。 在数据处理方面,Vue可以通过Vuex来实现全局状态管理。我们可以在Vuex中定义卖家相关的状态,如商品信息、订单信息等,并通过getter和mutation来对数据进行读取和修改。 卖家后台管理页面一般都有大量的表单和数据交互。Vue提供了v-model指令来实现表单元素与数据的双向绑定,可以方便地处理用户输入和展示数据。 此外,Vue还提供了许多特性和功能来提升用户体验。例如,可以通过Vue的动画和过渡效果来实现页面的平滑切换和元素的动态展示,使界面更加生动。也可以利用Vue的异步组件实现按需加载,提高页面的加载速度。 总之,Vue作为一个轻量级框架,具有灵活、高效、易用等特点,非常适合用于实现购物网站卖家后台管理页面。通过利用其丰富的特性和功能,可以提供一个友好、高效的管理界面,方便卖家管理商品、订单等相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值