app开发者平台在数字化时代的重要性与发展趋势解析
571
2022-10-25
封装、获取系统用户信息、角色及权限控制
@[TOC](文章目录
前言
需要在前端页面就获取用户信息、角色、用户菜单权限,实现对不同角色,不同用户,页面、菜单、方法甚至按钮的权限控制。
一、举例需求如下图:
二、前端ElementUI封装全局
系统用户信息、角色信息、菜单权限信息
data : function() {// data属性 return { menuData : [],// 菜单数据 isCollapse:false, defaultEpeneds : [],// 菜单默认展开 sysUser : {// 当前用户信息 id : null, username : null, image : null, realName : null, }, sysRole : {// 当前用户角色 id : null, username : null, roleIds : [], roleOptions : [], }, getUserInfo : function(func) {// 查看个人信息 // 获取当前实例 var _this = this; // 请求个人信息 this.doGetData(_this.baseUrl + _this.getUserInfoUrl, {}, function(r) { if (r.success) { func(r);// 回调 } else { _this.$message.error("服务器异常!"); } }); }, getUserRole : function(func) {// 查看个人角色 // 获取当前实例 var _this = this; // 请求个人信息 this.doGetData(_this.baseUrl + _this.getUserRoleUrl, {}, function(r) { if (r.success) { func(r);// 回调 } else { _this.$message.error("服务器异常!"); } }); }, getUserMenu : function() {// 获取我的菜单 // 获取当前实例 var _this = this; // 获取数据 _this.doGetData(_this.baseUrl + _this.getUserMenuUrl, {platform : "P"}, function(r) { if (r.success) { _this.menuData = r.data; for (var i = 0; i < _this.menuData.length; i++) { _this.defaultEpeneds.push(_this.menuData[i].id); } } else { _this.$message.error("服务器异常!"); } }); }, getUserInfoUrl: "sysUser/getUserInfo.do",// 获取用户信息请求URL getUserRoleUrl: "sysUser/getUserRole.do",// 获取用户角色请求URL getUserMenuUrl : "sysUser/getUserMenu.do",// 获取用户菜单URL ......... mounted : function() { // 获取实例对象 var _this = this; // 获取个人信息 _this.getUserInfo(function(r) { _this.sysUser = r.data; }); // 获取个人角色 _this.getUserRole(function(r) { _this.sysRole = r.data; }); // 获取菜单列表 _this.getUserMenu(); // 触发Common组件已挂载事件 _this.commonMounted(); // 监听窗口大小变化 window.onresize = function() { // 根据高度变化调整容器高度 _this.containerStyle2.height = (window.innerHeight - 60) + "px"; } },
三、后端获取方法
1.控制器
/**
* 查询用户信息
*/
@RequestMapping("/getUserInfo")
@ResponseBody
public Result getUserInfo() {
try {
// 查询系统用户
SysUser user = sysUserService.getSysUser(ShiroUtils.getLoginSysUserId());
// 返回Page结果集
return Results.queryOk(dto);
} catch (Exception e) {
logger.error("查询系统用户信息失败!SysUserId:" + ShiroUtils.getLoginSysUserId(), e);
return Results.queryError();
}
}
/**
* @Description 获取用户角色
**/
@RequestMapping("/getUserRole")
@ResponseBody
public Result getUserRole() {
try {
// 查询系统用户
SysUserRoles userRoles= sysUserService.getSysUserRoles(ShiroUtils.getLoginSysUserId());
return Results.queryOk(dto);
} catch (Exception e) {
logger.error("查询系统用户角色信息失败!SysUserId:" + ShiroUtils.getLoginSysUserId(), e);
return Results.queryError();
}
}
/**
* 获取用户菜单
*/
@SuppressWarnings("unchecked")
@RequestMapping("/getUserMenu")
@ResponseBody
public Result getUserMenu(@Valid GetUserMenuParam params, BindingResult r) {
try {
if (r.hasErrors()) {
return Results.paramError(r);
}
// 获取菜单会话属性
Object obj = ShiroUtils.getSessionAttr(Constants.USER_MENU_KEY);
List
2.实现接口
/**
* 获取用户信息
*/
@Override
public SysUser getSysUser(String userId) {
SysUser sysUser = sysUserService.selectById(userId);
return sysUser ;
}
/**
* 获取用户角色
*/
@Override
public SysUserRoles getSysUserRoles(String userId) {
// 创建响应对象
SysUserRoles dto = new SysUserRoles();
// 查询系统用户信息
SysUser sysUser = sysUserService.selectById(sysUserId);
BeanUtils.copyProperties(sysUser, dto);
// 查询指定系统用户的角色信息列表
List
3.ShiroUtils工具类
项目采用shiro权限控制
package com.cherry.framework.shiro.utils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.cherry.shop.security.entity.SysUser;
import com.cherry.shop.user.entity.User;
/**
* Shiro工具类
*/
public class ShiroUtils {
/**
* 获取凭证
* @param clazz
* 凭证字节码对象
* @return 凭证
*/
@SuppressWarnings("unchecked")
public static
四、前端页面引用全局方法
// 开票按钮
随心所往,看见未来。Follow your heart,see night!
欢迎点赞、关注、留言,收藏及转发,一起学习、交流!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~