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

  • 微信图标上有个是什么意思(微信图标上有个黄色的锁是什么意思)

    微信图标上有个是什么意思(微信图标上有个黄色的锁是什么意思)

  • 微云超级会员自动续费怎么取消(微云超级会员自动续费提醒)

    微云超级会员自动续费怎么取消(微云超级会员自动续费提醒)

  • 苹果11是单卡吗(苹果11只有一个卡槽怎么双卡双待)

    苹果11是单卡吗(苹果11只有一个卡槽怎么双卡双待)

  • 黄v和蓝v有什么区别

    黄v和蓝v有什么区别

  • 拼多多已经确认收货了,还能申请退款吗(拼多多已经确认收货了还能退货退款吗)

    拼多多已经确认收货了,还能申请退款吗(拼多多已经确认收货了还能退货退款吗)

  • 支付宝怎么订酒店(怎样在支付宝订酒店)

    支付宝怎么订酒店(怎样在支付宝订酒店)

  • 苹果手机发微信语音对方听到是噪音(苹果手机发微信怎么换行打字)

    苹果手机发微信语音对方听到是噪音(苹果手机发微信怎么换行打字)

  • iphone x强制关机怎么弄(iphone x强制关机 为啥一直自动开机)

    iphone x强制关机怎么弄(iphone x强制关机 为啥一直自动开机)

  • iwatch5可以独立打电话吗(apple watch series 5可以独立播放音乐吗)

    iwatch5可以独立打电话吗(apple watch series 5可以独立播放音乐吗)

  • 手机可以投屏到笔记本电脑上吗(手机可以投屏到小度吗?)

    手机可以投屏到笔记本电脑上吗(手机可以投屏到小度吗?)

  • 手机怎么设置透明壁纸(手机怎么设置透明图标)

    手机怎么设置透明壁纸(手机怎么设置透明图标)

  • 抖音限流多久能恢复(抖音限流多久能发作品)

    抖音限流多久能恢复(抖音限流多久能发作品)

  • 余额宝体验金是什么(余额宝体验金是什么回事用不用还)

    余额宝体验金是什么(余额宝体验金是什么回事用不用还)

  • 淘宝怎么调夜间模式(淘宝如何设置夜间)

    淘宝怎么调夜间模式(淘宝如何设置夜间)

  • 苹果为什么系统占了40g(苹果为什么系统数据占这么多的空间)

    苹果为什么系统占了40g(苹果为什么系统数据占这么多的空间)

  • 苹果11pro什么时候发售(苹果11pro什么时候上架)

    苹果11pro什么时候发售(苹果11pro什么时候上架)

  • ios12地图3d怎么打开(ios地图如何3d)

    ios12地图3d怎么打开(ios地图如何3d)

  • 139邮箱的格式怎么写(139邮箱格式怎么写 举个例子)

    139邮箱的格式怎么写(139邮箱格式怎么写 举个例子)

  • ipadpro一共几代(ipad pro一共有几代了)

    ipadpro一共几代(ipad pro一共有几代了)

  • 华为nova3怎样设置锁屏时间(华为nova3怎样设置屏幕时间)

    华为nova3怎样设置锁屏时间(华为nova3怎样设置屏幕时间)

  • 新版qq热聊在哪里(新版qq热聊在哪里打开)

    新版qq热聊在哪里(新版qq热聊在哪里打开)

  • 常见的输入输出设备(常见的输入输出接口)

    常见的输入输出设备(常见的输入输出接口)

  • CSS中的四种定位方式(css5个定位)

    CSS中的四种定位方式(css5个定位)

  • 【TypeScript】TS类型守卫(六)(typescript .d.ts)

    【TypeScript】TS类型守卫(六)(typescript .d.ts)

  • 增值税发票记账联和抵扣联都丢了怎么办
  • 销售白酒是否要交消费税?
  • 个人出租商铺如何缴纳房产税
  • 新公司成立需要刻哪些章
  • etc充值怎么操作
  • 退货退款分录
  • 公司办理个人所得税退税
  • 农村土地征用补偿是多少钱一亩
  • 非营利性代收代付费用会计处理怎么做?
  • 劳务费做账要交个人所得税吗?
  • 土地增值税纳税地点
  • 周转天数是越大越好吗
  • 个体户需要申报工资薪金吗
  • 发生的费用发票会计分录
  • 收取滞纳金是行政处罚吗
  • 废料出售收入
  • 车辆购置税计入固定资产一起折旧吗
  • 残疾小伙小强
  • win7如何隐藏任务栏正在游戏的图标
  • 房产契税征收率
  • 土地征收补偿款多久到账
  • 施工组织评审会谁组织
  • 数字证书认证系统
  • 装饰装修工程月薪多少
  • 重建索引命令
  • 移动硬盘通过软件改硬盘容量怎么改
  • php字符串赋值
  • opera software
  • 涉税专业服务机构是什么
  • php字符转换成数字
  • linux动态扩容
  • apkpure 安全
  • 附有退回条件的销售商
  • 集团公司收到的上级秘密
  • 利润表项目本期怎么算
  • 商业连锁企业有哪些
  • 调整以前年度少计提的工资
  • php字符串转浮点型
  • 普通发票和增值税发票都能报销吗
  • 长期应付款列报为什么是后一年的
  • 应税货物及劳务无法录入
  • 权限管理实现的功能包括
  • python编程快速上手pdf百度云
  • 邮寄的发票对方没收到怎么办
  • 展会门票怎么入账
  • 帝国cms移动端
  • 帝国cms真的很好用
  • 帝国cms适合个人用吗
  • 电子发票可以作废吗?当月
  • 工会账以固定资产投资
  • 零申报失败什么原因
  • PostgreSQL教程(九):事物隔离介绍
  • 工业企业制造费用具体怎么摊
  • 贴现的概念及计算公式
  • 过次页是本页合计吗
  • 投资公司如何运作
  • 税务局返还的个税手续费是否纳税
  • 折扣如何做账
  • 收到汽车抵账账务处理
  • 暂估费用票的账务处理
  • 通过一达通出口到底开什么发票
  • 各类奖金正确的排序
  • 销售费用和管理费用的税前扣除
  • 收到税务局汇算清缴退所得税怎么做账
  • 一般纳税人增值税优惠政策2023
  • sqlserver多表查询怎么加索引
  • fedora os
  • 让mac桌面变整洁的方法
  • windowsxp的主要特点是什么
  • win8n
  • w10系统屏幕一直在闪
  • win7打不开任务栏
  • IE6,IE7和firefox对DIV的支持区别
  • 使用forever管理nodejs应用教程
  • Python中urllib+urllib2+cookielib模块编写爬虫实战
  • 在python中的用法
  • unity c语言
  • 消费税要把增值税算进去吗
  • 河南税务公众号缴费养老保险
  • 生育津贴是分期的吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设