位置: 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)(福克兰群岛属于哪国)

  • 电脑桌面图标隐藏后怎么恢复(电脑桌面图标隐藏快捷键)

    电脑桌面图标隐藏后怎么恢复(电脑桌面图标隐藏快捷键)

  • airpods3有降噪吗(苹果airpods三代有降噪吗)

    airpods3有降噪吗(苹果airpods三代有降噪吗)

  • 小米10青春版如何插卡(小米10青春版如何关闭纯净模式)

    小米10青春版如何插卡(小米10青春版如何关闭纯净模式)

  • 淘宝禁止发布的商品(淘宝禁止发布商品到2999年)

    淘宝禁止发布的商品(淘宝禁止发布商品到2999年)

  • 腾讯视频怎么绑定大王卡免流量(腾讯视频怎么绑定别人的vip)

    腾讯视频怎么绑定大王卡免流量(腾讯视频怎么绑定别人的vip)

  • 钢化膜里面有灰尘怎么办(钢化膜下有灰)

    钢化膜里面有灰尘怎么办(钢化膜下有灰)

  • 微信群公告作用和意义(微信群公告的作用)

    微信群公告作用和意义(微信群公告的作用)

  • iphonex拉黑后想看短信(iphone拉黑以后)

    iphonex拉黑后想看短信(iphone拉黑以后)

  • 拼多多待支付会有影响吗(拼多多待支付会退推广费吗)

    拼多多待支付会有影响吗(拼多多待支付会退推广费吗)

  • 学习通第二次看视频会把总时长加上吗

    学习通第二次看视频会把总时长加上吗

  • 苹果se悬浮球在哪设置(iphone悬浮球怎么调出来)

    苹果se悬浮球在哪设置(iphone悬浮球怎么调出来)

  • 谷歌登录限制要等多久(谷歌无法登录提示登录过多)

    谷歌登录限制要等多久(谷歌无法登录提示登录过多)

  • 小米解bl锁什么意思(小米解bl锁要多长时间)

    小米解bl锁什么意思(小米解bl锁要多长时间)

  • 微信顶部看不见时间(微信顶部不显示文字怎么设置)

    微信顶部看不见时间(微信顶部不显示文字怎么设置)

  • 华为p40支持红外遥控器功能吗(华为p40支持红外线功能吗)

    华为p40支持红外遥控器功能吗(华为p40支持红外线功能吗)

  • 路由器电源多少伏(路由器电源多少w)

    路由器电源多少伏(路由器电源多少w)

  • avout接口是什么意思(a/v接口是什么意思)

    avout接口是什么意思(a/v接口是什么意思)

  • 中继器和路由器的区别(中继器和路由器分别工作在)

    中继器和路由器的区别(中继器和路由器分别工作在)

  • trt-al00a是华为什么型号(华为trt-al00a什么型号)

    trt-al00a是华为什么型号(华为trt-al00a什么型号)

  • ipad可以登录pc端吗(ipad可以登陆网页吗)

    ipad可以登录pc端吗(ipad可以登陆网页吗)

  • 天猫八八会员怎么开通(天猫88会员8.8元)

    天猫八八会员怎么开通(天猫88会员8.8元)

  • 怎样给微信头像加一面五星红旗(怎样给微信头像加文字)

    怎样给微信头像加一面五星红旗(怎样给微信头像加文字)

  • 华为ai音箱能连电脑吗(华为ai音箱能连两个手机吗)

    华为ai音箱能连电脑吗(华为ai音箱能连两个手机吗)

  • freebuds3什么时候上市(freebuds3什么时候更新)

    freebuds3什么时候上市(freebuds3什么时候更新)

  • 豆瓣电影如何播放(豆瓣电影怎么播放?)

    豆瓣电影如何播放(豆瓣电影怎么播放?)

  • Linux系统中Squid代理服务器配置全过程解析

    Linux系统中Squid代理服务器配置全过程解析

  • python PyQt如何使用资源

    python PyQt如何使用资源

  • 个人话费发票怎么入账
  • 房屋出租收入会计分录
  • 外购的产品用于投资
  • 季度申报残保金怎么填写
  • 收到货款开的增值税发票怎么写分录
  • 外币投入的资本
  • 个人出租场地个人所得税
  • 收到专项拨款属于什么科目
  • 开发商开发土地需要交国家什么钱
  • 公务费和业务费怎么算
  • 个体工商户的公章丢了怎么办
  • 查账征收的个体户注销流程
  • 电脑输入法切换键怎么设置
  • u盘转移到另一个u盘
  • 系统升级为win11
  • 多缴的企业所得税如何处理
  • mac鼠标移动到角落立刻显示桌面
  • macos怎么看
  • php经典教程
  • 电脑每次开机都要选择系统怎么办
  • windows11搜索
  • 代开增值税发票沒有付款怎么做账?
  • 银边翠的栽培历史
  • mac怎么写代码
  • 投资收益怎么做不影响利润
  • 增值税专用发票有几联?
  • chrome安装教程
  • npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolve dependency
  • 开源原则
  • 间接费用计算
  • 上年折旧费多计提了,本年怎么调
  • 企业的所有分类
  • 工资为0需要申报个税吗
  • 预算凭证可以单张打印吗
  • python locator
  • 会计怎么实现财务自由
  • json转pojo
  • 销售赠品入什么科目
  • 融资租赁业务需要什么条件
  • 网上更正增值税申报表
  • 公户直接转给私人账户违法么
  • 企业当年实现的利润属于哪类会计科目
  • 一般纳税人结转税额怎么做会计分录
  • 融资租赁固定资产折旧年限
  • 企业职工福利费使用范围和标准
  • 可转换公司债券例题
  • 装载机如何计提折旧费用
  • 股权转让如何计算股权原值
  • 委托加工存货收回后直接用于销售的账务处理
  • 分包管理费取费标准
  • 母子公司之间的借款利息支出增值税能否抵扣
  • 低值易耗品入账
  • 政府给企业的奖励能给个人吗
  • 福利费的概念是指
  • 应付账款与应付票据结合的原则
  • 预收账款的金额是什么
  • 发票报销是什么流程
  • 暂估的进项税额怎么抵扣
  • 工程内部承包合同
  • 会计刚开始学什么
  • mysql 临时表
  • SQL语句查询数据量
  • sql游标实例
  • 怎么删除服务器管理的服务
  • Linux系统调用函数
  • windows7旗舰版开机声音
  • linux如何创建ftp
  • 迄今最好的Http请求框架
  • unity3d脚本编程
  • jQuery formValidator表单验证
  • js验证身份证合法性
  • jquery.js插件
  • python怎么读取中文txt文本
  • 江苏城乡医疗保险网上缴费2024年
  • 高速公路过路费一公里多少钱
  • 山西国家税务总局官网
  • 事业单位大额资金拨付需要什么报账材料
  • 一般贸易和非一切贸易
  • 90平房子税
  • 电费增值税专用发票如何抵税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设