首页 > 其他分享 >用户路由及按钮权限管理

用户路由及按钮权限管理

时间:2023-04-04 19:55:07浏览次数:36  
标签:角色 添加 按钮 权限 路由 页面

需求背景:

当我们在做后台管理系统的时候,都会涉及到系统的菜单树如何动态显示的问题。目前基本上都是RBAC的解决方案,即Role-Based Access Control,权限与角色相关联,给用户通设置适当角色的而得到角色的权限

 

路由权限方案:

1、前端路由根据角色控制页面权限:即为每个页面设置允许进入的角色,通过判断用户角色授权进入与否

优点:实现方式简单

缺点:1、不灵活,当一个页面允许进入的角色类型发生变化,代码要更改;2、需要考虑访问的页面没有权限时需要考虑重定向到哪里的问题

2、动态路由:即通过接口返回用户有权限进入的路由列表,路由动态注入

优点:数据只返回有权限路由,不存在访问到无权限的bug;维护权限数据,前端代码不用频繁改动

缺点:需要菜单管理页面配合维护数据

 

项目需求

  • 首页、登录、404等页面无需权限也能访问
  • 剩余页面根据权限配置显示
  • 一级路由显示在顶部导航栏,二级路由页面属于导航页的显示在左侧导航栏
  • 每次切换路由后重新获取下权限
  • 页面的每个按钮也添加权限配置

 

实现方式:

1、路由权限

将页面路由分成两类,一类:白名单,项目初始化时即完成注册,一类:权限路由,根据角色类型获取路由权限数据,动态添加到路由文件,关键代码如下:

//路由白名单
import { routerArr } from './defaultRouts' const routes: Array<RouteConfig> = [ ...routerArr,//白名单路由 { path: '/login', name: 'login', component: () => import('@/pages/layout/login.vue'), }, { path: '/401', name: '401', component: () => import('@/components/error/401.vue') }, { path: '*', name: '404', component: () => import('@/components/error/404.vue') }, ] const router = new VueRouter({ routes, // 对于页面跳转,全部都返回到页面顶部。 scrollBehavior(to, from, savedPosition) { return { x: 0, y: 0 }; } });
//动态添加路由
// 避免添加重复路由
if (hasOwn(el)) {
    // router路由实例对象
    router.options.routes.push(el)
    router.addRoute(el)
}

 

2、按钮权限设置

对按钮进行类型划分,赋予code属性。给每个页面需要权限的按钮设置数据权限;前端对每个页面的权限按钮数据收集处理(当前采用,将权限按钮的code收集到btnArr内,存放于页面meta);全局注册权限判断方法。关键代码如下

 

 

// 判断用户是否有按钮权限
Vue.prototype.$btnPermissions = function (code) {
    const btnArr = this.$route.meta.btnArr || []
    return btnArr.includes(code)
}

 

注意事项:

1、动态添加路由,相同路由重复添加—添加前判断路由实例对象中是否已有改路由,有则不添加

2、路由重定向问题——动态拼装或者数据配置一级页面重定向到哪个二级页面

3、如果没有没有默认的白名单页面,登录后页面跳转的处理

 

总结:

权限管理实现方式多种多样,根据自身需求自行定制合适的方案。其核心思想,即RBAC的解决方案。

 

标签:角色,添加,按钮,权限,路由,页面
From: https://www.cnblogs.com/weichen913/p/17287742.html

相关文章

  • Kubernetes——身份与权限认证
    摘要Kubernetes中的网络可以说对初次接触Kubernetes或者没有网络方面经验的人来说可能是其中最难的部分。Kubernetes本身并不提供网络功能,只是把网络接口开放出来,通过插件的形式实现。一、扁平网络Flannel二、非Overlay扁平网络Calico三、基于eBPF的网络Cilium博文参考......
  • 认证于权限
    drf认证组件在主应用的settings中配置,此时的认证和权限是全局的,若部分视图不需要权限于认证处理只需要将类名置空即可"""drf配置信息"""REST_FRAMEWORK={#循环认证,一旦认证成功则不会往下再去认证'DEFAULT_AUTHENTICATION_CLASSES':['Restful_api.aut......
  • flask:Flask 和pythonweb框架介绍、flask快速使用、登录,显示用户信息小案例、配置文件
    目录一、Flask和pythonweb框架介绍1.1pythonweb框架介绍1.2flask介绍1.3wsgiref1.4用wsgirf和werkzeug写web二、flask快速使用三、登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件3.5知识点总结四、配置文件的使用方式1、设置方式一(测试中使用的......
  • HCIP-路由策略实验
      实验要求:利用重发布技术与路由策略满足路由无环且避免选路不佳 实验思路:一、配置IP地址[r1]intg0/0/0[r1-GigabitEthernet0/0/0]ipa192.168.12.124[r1]intg0/0/1[r1-GigabitEthernet0/0/1]ipa192.168.13.124[r1-GigabitEthernet0/0/1]intl0[r1-Loop......
  • 路由基础
    路由协议基础知识什么是路由?路由是指导IP报文发送的路径信息。路由表只存在于终端计算机、路由器和三层交换机中,二层交换机中不存在路由表。 IP路由过程 路由器关键功能检查数据包的目的地确定信息源发现可能的路由选择最佳路由验证和维护路由信息 路由表一条路......
  • jenkins视图权限管理
    插件安装         创建用户角色            创建项目权限     注意:这里强调下它所匹配的不是视图的名字,而是项目的名字。项目就是流水线          角色分配          ......
  • HCIP-路由策略
    路由策略控制层流量-----路由协议传递路由信息产生的流量数据层流量-----设备访问目的地址是产生的流量所谓的路由策略-----在控制层面转发流量的过程中,截取流量,之后修改流量再转发或者不转发,最终达到影响路由器路由表的生成,干涉选路的效果。 抓流量ACL列表[r3-......
  • 为什么 B 页面的 unload 事件在刷新后点击浏览器的返回按钮不触发?
    ......
  • 无线热点网络传输给路由器
    以H3CBX54为例首先得通过知道H3CBX54访问192.168.124.1的服务地址的账户密码,没有则重置路由器。重置之后,选择无线中继,会出现一个wifi列表选择。(如果找不到手机共享的热点,可以先用笔记本电脑连接热点,再开一个新热点出来,名字不要起中文,可能会检索不到或者乱码)等待30s左右会提......
  • android 权限
    1.AIDandroid系统沿用了Linux的UID/GID权限模型,但并没有使用传统的passws和group文件来存储用户和用户组的认证凭据,作为代替,Android定义了从名称到AndroidID(AID)的映射表。system/core/include/private/android_filesystem_config.h#defineAID_ROOT0/*traditional......