位置: IT常识 - 正文

若依前后端分离版3、用户角色权限和动态菜单(若依前后端分离做的系统)

编辑:rootadmin
若依前后端分离版3、用户角色权限和动态菜单 文章目录一、用户角色和权限1.前端2.后端一、用户角色和权限1.前端

推荐整理分享若依前后端分离版3、用户角色权限和动态菜单(若依前后端分离做的系统),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:若依前后端分离二次开发,若依前后端分离 net版,若依前后端分离二次开发,若依前后端分离二次开发部署,若依前后端分离二次开发部署,若依前后端分离框架,若依前后端分离框架,若依前后端分离二次开发,内容如对您有帮助,希望把文章链接给更多的朋友!

我们通过登陆,F12进行查看发现还有getinfo和getRouters方法,我们发现若依在页面跳转的时候都会出现这两个方法,这其实就是我们在路由里边配置的东西,我们找到全局配置的src\permission.js下发现router.beforeEach

//全局管理路由的,每个页面跳转的时候都要运行router.beforeEach((to, from, next) => { NProgress.start() if (getToken()) { to.meta.title && store.dispatch('settings/setTitle', to.meta.title) /* has token*/ if (to.path === '/login') { next({ path: '/' }) NProgress.done() } else { if (store.getters.roles.length === 0) { isRelogin.show = true // 判断当前用户是否已拉取完user_info信息 store.dispatch('GetInfo').then(() => { isRelogin.show = false store.dispatch('GenerateRoutes').then(accessRoutes => { // 根据roles权限生成可访问的路由表 router.addRoutes(accessRoutes) // 动态添加可访问路由表 next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 }) }).catch(err => { store.dispatch('LogOut').then(() => { Message.error(err) next({ path: '/' }) }) }) } else { next() } } } else { // 没有token if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入 next() } else { next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 NProgress.done() } }})

在其中呢可以找到GetInfo和GenerateRoutes,我们在src\store\modules\user.js中找到封装的GetInfo方法

// 获取用户信息 GetInfo({ commit, state }) { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.user const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 commit('SET_ROLES', res.roles) commit('SET_PERMISSIONS', res.permissions) } else { commit('SET_ROLES', ['ROLE_DEFAULT']) } commit('SET_NAME', user.userName) commit('SET_AVATAR', avatar) resolve(res) }).catch(error => { reject(error) }) }) },

其中使用commit将后端传递过来的角色和权限记录下来,给vuex进行赋值进行一个全局存储,看到若依调用了一个getInfo方法,打开src\api\login.js找到封装的方法

// 获取用户详细信息export function getInfo() { return request({ url: '/getInfo', method: 'get' })}若依前后端分离版3、用户角色权限和动态菜单(若依前后端分离做的系统)

我们知道getinfo是怎么发送的了

2.后端

直接搜索getinfo方法

@GetMapping("getInfo") public AjaxResult getInfo() { SysUser user = SecurityUtils.getLoginUser().getUser(); // 角色集合 Set<String> roles = permissionService.getRolePermission(user); // 权限集合 // 用户对表单是否拥有权限进行操作(菜单中的perms是用户能控制的权限) Set<String> permissions = permissionService.getMenuPermission(user); AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); return ajax; }

首先通过getRolePermission方法获取到角色

public Set<String> getRolePermission(SysUser user) { Set<String> roles = new HashSet<String>(); // 管理员拥有所有权限 if (user.isAdmin()) { roles.add("admin"); } else { roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); } return roles; }

通过用户的id查询用户角色,进入selectRolePermissionByUserId方法中

public Set<String> selectRolePermissionByUserId(Long userId) { List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId); Set<String> permsSet = new HashSet<>(); for (SysRole perm : perms) { if (StringUtils.isNotNull(perm)) { //获取 permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); } } return permsSet; }

发现若依用户id查询用户角色列表,针对一个用户拥有的多个角色通过for循环,获取perm中的RoleKey中的值,trim方法去除字符串首位的空格,并且通过split方法进行“,”分割,最后返回 其次通过getMenuPermission方法获取到权限

public Set<String> getMenuPermission(SysUser user) { Set<String> perms = new HashSet<String>(); // 管理员拥有所有权限 if (user.isAdmin()) { perms.add("*:*:*"); } else { List<SysRole> roles = user.getRoles(); if (!roles.isEmpty() && roles.size() > 1) { // 多角色设置permissions属性,以便数据权限匹配权限 for (SysRole role : roles) { Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); role.setPermissions(rolePerms); perms.addAll(rolePerms); } } else { perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); } } return perms; }

使用if判断是否是管理员,管理员直接返回所有权限,不是管理员则获取他的角色来进行判断,多个角色通过角色Id进行权限的查询,没有多个角色则通过用户ID进行查询

List<String> perms = menuMapper.selectMenuPermsByUserId(userId); Set<String> permsSet = new HashSet<>(); for (String perm : perms) { if (StringUtils.isNotEmpty(perm)) { permsSet.addAll(Arrays.asList(perm.trim().split(","))); } } return permsSet;

查询后结果处理相同,针对一个用户拥有的多个权限通过for循环,获取perm中的值并且通过“,”进行分割,最后返回

本文链接地址:https://www.jiuchutong.com/zhishi/287267.html 转载请保留说明!

上一篇:Node.js与相关依赖的版本对照表(nodejs应用领域)

下一篇:福克兰群岛上的南跳岩企鹅 (© Heike Odermatt/Minden Pictures)(福克兰群岛属于哪国)

  • 抖音浏览记录关闭别人还能看到我的浏览记录吗(抖音浏览记录关闭了看别人作品会显示吗)

    抖音浏览记录关闭别人还能看到我的浏览记录吗(抖音浏览记录关闭了看别人作品会显示吗)

  • qq空间注销后还能恢复使用吗(QQ空间注销后还能开通吗)

    qq空间注销后还能恢复使用吗(QQ空间注销后还能开通吗)

  • ipad怎么投屏到电脑(ipad怎么投屏到电视机)

    ipad怎么投屏到电脑(ipad怎么投屏到电视机)

  • 快手怎么看是废号(快手怎么查是不是封永久)

    快手怎么看是废号(快手怎么查是不是封永久)

  • 抖音重复播放算次数吗(抖音重复播放会重复消耗流量吗)

    抖音重复播放算次数吗(抖音重复播放会重复消耗流量吗)

  • 外生变量和内生变量的区别(外生变量和内生变量的联系)

    外生变量和内生变量的区别(外生变量和内生变量的联系)

  • hry al00a是华为什么型号(hry_al00ta华为什么型号)

    hry al00a是华为什么型号(hry_al00ta华为什么型号)

  • 微信新消息通知关闭是什么意思(微信新消息通知关闭后打不开怎么办)

    微信新消息通知关闭是什么意思(微信新消息通知关闭后打不开怎么办)

  • 京东货到付款拒收后果(京东货到付款拒收邮费谁来承担)

    京东货到付款拒收后果(京东货到付款拒收邮费谁来承担)

  • 苹果黑解手机是什么意思(苹果黑解手机是什么原理)

    苹果黑解手机是什么意思(苹果黑解手机是什么原理)

  • 笔记本fn键是什么意思(笔记本fn键是什么用的)

    笔记本fn键是什么意思(笔记本fn键是什么用的)

  • 为什么信任不了软件(信任不了怎么办)

    为什么信任不了软件(信任不了怎么办)

  • 如何退出企业微信(如何退出企业微信团队)

    如何退出企业微信(如何退出企业微信团队)

  • 滴滴快车预付款能退吗(滴滴快车预付款怎么取消)

    滴滴快车预付款能退吗(滴滴快车预付款怎么取消)

  • 苹果手机晚上怎么拍照(苹果手机晚上怎么调夜间模式)

    苹果手机晚上怎么拍照(苹果手机晚上怎么调夜间模式)

  • 手机怎么设置双屏(手机怎么设置双重密码)

    手机怎么设置双屏(手机怎么设置双重密码)

  • 华为怎么开启螺旋仪(华为怎么开启螺丝孔)

    华为怎么开启螺旋仪(华为怎么开启螺丝孔)

  • 高德地图怎么微信支付(高德地图怎么微信分享)

    高德地图怎么微信支付(高德地图怎么微信分享)

  • 手机上的照片怎么打印出来(手机上的照片怎么同步到ipad上)

    手机上的照片怎么打印出来(手机上的照片怎么同步到ipad上)

  • xr不显示原彩显示了(苹果xr屏幕没有原彩显示)

    xr不显示原彩显示了(苹果xr屏幕没有原彩显示)

  • 美柚怎么使用(怀孕了美柚怎么使用)

    美柚怎么使用(怀孕了美柚怎么使用)

  • imessag显示已送达没显示已读(imessag显示已送达 对方就是肯定开了嘛)

    imessag显示已送达没显示已读(imessag显示已送达 对方就是肯定开了嘛)

  • 为什么别人打电话给我都是通话中(为什么别人打电话接不到)

    为什么别人打电话给我都是通话中(为什么别人打电话接不到)

  • windowsxp任务栏不能设置为

    windowsxp任务栏不能设置为

  • 拼多多能上传视频吗(拼多多能上传视频赚钱吗)

    拼多多能上传视频吗(拼多多能上传视频赚钱吗)

  • 直播唱歌需要什么设备(直播唱歌需要什么配置)

    直播唱歌需要什么设备(直播唱歌需要什么配置)

  • 淘宝如何退货(淘宝如何退货给卖家)

    淘宝如何退货(淘宝如何退货给卖家)

  • 博德明高沼上布朗威利山麓的废弃小屋,英格兰 (© Helen Hotson/Alamy Stock Photo)

    博德明高沼上布朗威利山麓的废弃小屋,英格兰 (© Helen Hotson/Alamy Stock Photo)

  • 梅兰加尔堡,印度焦特布尔 (© Jayakumar/Shutterstock)(梅尔加足球俱乐部)

    梅兰加尔堡,印度焦特布尔 (© Jayakumar/Shutterstock)(梅尔加足球俱乐部)

  • 印花税办理流程
  • 企业对伤残怎么赔偿?
  • 退销售货款的现金流是哪一个
  • 行政事业单位房产税免征文件
  • 企业的车辆因违法停放
  • 以旧换新帐务处理
  • 准予以后纳税年度结转扣除的项目有
  • 电子版发票怎么弄
  • 开具的增值税专用发票上注明的金额
  • 国税申报需要带什么资料
  • 股权转让受让人违约
  • 建筑公司不需要预缴增值税的有
  • 房地产开发企业土地增值税清算
  • 北京增值税纳税申报表在哪里打印
  • 增值税专用发票验票
  • 预缴所得税会计分录怎么做
  • 稽查以前年度补税
  • 税务咨询费用
  • 个体户怎
  • 报表上应交税费是负数是什么意思
  • 货物赔偿款会计分录
  • 手机压缩包损坏怎么修复
  • 未担保余值的账户怎么查
  • 其他应付款的会计分录
  • 税务发票盖章要求
  • 代理进口增值税客户不抵扣,进出口公司可以抵扣吗
  • 扣客户的罚款会计科目
  • 房地产企业如何结转成本
  • vue打包速度优化
  • qqlogin.exe是什么进程 qqlogin.exe应用程序错误解决办法
  • php教程 ftp 函数
  • 进程查看工具
  • kzip_main.exe是什么
  • 会计差错更正账务处理会计分录
  • php错误和异常
  • 金蝶怎么加人
  • php实现自动识别的方法
  • js倒计时函数
  • php访问sqlserver
  • Apache PHP MySql安装配置图文教程
  • php、java、android、ios通用的3des方法(推荐)
  • echo输出语句
  • 企业如何利用期货对冲风险怎么操作
  • 审计报告分别在什么阶段
  • 接手前往年的银行余额不平怎么办?
  • python elasticsearch timeout
  • 简述sql server
  • 帝国cms模型
  • SQL Server 2005 同步复制技术
  • 无形资产摊销会计凭证
  • 企业所得税退税有风险吗
  • 差额开票和全额开票
  • 购买理财计入现金流量表什么科目
  • 独资合伙公司
  • 出差的住宿费能抵扣吗
  • 报销差旅费大于预借差旅费会计分录
  • 运费在会计科目中属于什么费用
  • 预付款怎样做会计分录
  • mysql常用命令语句
  • windows98的开始菜单包括了
  • windows8自动更新卡住了怎么办
  • 上网本安装win7
  • windows8怎么设置
  • win10怎么自定义壁纸
  • mac新版系统
  • cocos编程
  • 关于我和鬼变成家人的那件事
  • 基于javascript数独游戏论文参考文献
  • js加载失败怎么办
  • node与js的区别
  • python生成器详解
  • 获取服务器信息失败mc
  • unity引擎叫什么
  • jquery关闭当前页面
  • python爬虫有道翻译
  • 北京天然气收费标准2024年
  • 报废车税务怎么处理
  • 中国烟草一年税收占全国总收入
  • 应纳税所得额怎么求公式
  • 郑州房子契税退税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设