返回

技术指南:ElementUI封装全局 系统用户信息、角色及权限控制

后端

前言

在现代Web应用程序中,用户权限控制是一个至关重要的方面。通过对不同用户角色授予不同的权限,我们可以确保用户只能访问和操作他们被授权的内容和功能。ElementUI是一个流行的前端框架,它提供了丰富的UI组件和强大的功能,可以帮助我们轻松地构建具有用户权限控制功能的Web应用程序。

一、举例需求如下图:

[图片]

二、前端ElementUI封装全局 系统用户信息、角色信息、菜单权限信息

// 在main.js中导入必要的模块
import { createApp } from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App.vue'
import router from './router'
import store from './store'

// 创建Vue实例
const app = createApp(App)

// 使用ElementUI
app.use(ElementUI)

// 使用路由
app.use(router)

// 使用状态管理
app.use(store)

// 挂载Vue实例
app.mount('#app')
// 在App.vue中定义全局属性和方法
export default {
  data() {
    return {
      // 用户信息
      userInfo: {},
      // 角色信息
      roleInfo: {},
      // 菜单权限信息
      menuInfo: {}
    }
  },
  created() {
    // 获取用户信息、角色信息和菜单权限信息
    this.getUserInfo()
    this.getRoleInfo()
    this.getMenuInfo()
  },
  methods: {
    // 获取用户信息
    getUserInfo() {
      // 从后端获取用户信息
      this.$axios.get('/api/user/info').then(res => {
        this.userInfo = res.data
      })
    },
    // 获取角色信息
    getRoleInfo() {
      // 从后端获取角色信息
      this.$axios.get('/api/role/info').then(res => {
        this.roleInfo = res.data
      })
    },
    // 获取菜单权限信息
    getMenuInfo() {
      // 从后端获取菜单权限信息
      this.$axios.get('/api/menu/info').then(res => {
        this.menuInfo = res.data
      })
    }
  }
}
// 在store/index.js中定义全局状态
export default new Vuex.Store({
  state: {
    // 用户信息
    userInfo: {},
    // 角色信息
    roleInfo: {},
    // 菜单权限信息
    menuInfo: {}
  },
  mutations: {
    // 设置用户信息
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    // 设置角色信息
    setRoleInfo(state, roleInfo) {
      state.roleInfo = roleInfo
    },
    // 设置菜单权限信息
    setMenuInfo(state, menuInfo) {
      state.menuInfo = menuInfo
    }
  },
  actions: {
    // 获取用户信息
    getUserInfo({ commit }) {
      // 从后端获取用户信息
      this.$axios.get('/api/user/info').then(res => {
        commit('setUserInfo', res.data)
      })
    },
    // 获取角色信息
    getRoleInfo({ commit }) {
      // 从后端获取角色信息
      this.$axios.get('/api/role/info').then(res => {
        commit('setRoleInfo', res.data)
      })
    },
    // 获取菜单权限信息
    getMenuInfo({ commit }) {
      // 从后端获取菜单权限信息
      this.$axios.get('/api/menu/info').then(res => {
        commit('setMenuInfo', res.data)
      })
    }
  }
})

三、后端获取方法

1.控制器

@RestController
@RequestMapping("/api")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/info")
    public ResponseEntity<UserInfo> getUserInfo() {
        UserInfo userInfo = userService.getUserInfo();
        return ResponseEntity.ok(userInfo);
    }
}
@RestController
@RequestMapping("/api")
public class RoleController {

    @Autowired
    private RoleService roleService;

    @GetMapping("/role/info")
    public ResponseEntity<RoleInfo> getRoleInfo() {
        RoleInfo roleInfo = roleService.getRoleInfo();
        return ResponseEntity.ok(roleInfo);
    }
}
@RestController
@RequestMapping("/api")
public class MenuController {

    @Autowired
    private MenuService menuService;

    @GetMapping("/menu/info")
    public ResponseEntity<MenuInfo> getMenuInfo() {
        MenuInfo menuInfo = menuService.getMenuInfo();
        return ResponseEntity.ok(menuInfo);
    }
}

2.实现接口

public interface UserService {

    UserInfo getUserInfo();
}
public interface RoleService {

    RoleInfo getRoleInfo();
}
public interface MenuService {

    MenuInfo getMenuInfo();
}

3.ShiroUtils工具类

public class ShiroUtils {

    public static UserInfo getUserInfo() {
        Subject subject = SecurityUtils.getSubject();
        UserInfo userInfo = (UserInfo) subject.getPrincipal();
        return userInfo;
    }

    public static RoleInfo getRoleInfo() {
        Subject subject = SecurityUtils.getSubject();
        RoleInfo roleInfo = (RoleInfo) subject.getPrincipals().oneByType(RoleInfo.class);
        return roleInfo;
    }

    public static MenuInfo getMenuInfo() {
        Subject subject = SecurityUtils.getSubject();
        MenuInfo menuInfo = (MenuInfo) subject.getPrincipals().oneByType(MenuInfo.class);
        return menuInfo;
    }
}

通过以上步骤,我们就可以轻松地实现ElementUI前端封装系统用户信息、角色信息和菜单权限信息,以及后端获取这些信息的功能。希望本指南对您有所帮助!