首页 > 编程语言 >java实现角色及菜单权限

java实现角色及菜单权限

时间:2024-09-22 20:51:09浏览次数:9  
标签:菜单 java List private public KEY return 权限 id

在Java中实现角色及菜单权限管理是一种常见的需求,特别是在企业级应用中。这种权限管理通常涉及多个层次的设计,包括角色、用户、权限和菜单等。下面是一个完整的示例,展示如何在Java中实现角色及菜单权限管理。

设计思路

  • 实体类定义:定义用户、角色、权限和菜单的实体类。
  • 数据库表设计:设计相应的数据库表。
  • 服务层实现:实现用户、角色、权限和菜单的服务层逻辑。
  • 控制器层实现:实现控制器层逻辑,用于处理前端请求。

步骤详解

1. 实体类定义

首先定义一些基本的实体类,包括用户、角色、权限和菜单。

// 用户实体类
public class User {
    private Long id;
    private String username;
    private String password;
    private List<Role> roles; // 用户拥有的角色列表

    // Getters and Setters
}

// 角色实体类
public class Role {
    private Long id;
    private String name;
    private List<Permission> permissions; // 角色拥有的权限列表

    // Getters and Setters
}

// 权限实体类
public class Permission {
    private Long id;
    private String name;
    private String url; // 权限对应的URL

    // Getters and Setters
}

// 菜单实体类
public class Menu {
    private Long id;
    private String name;
    private String url;
    private List<Permission> permissions; // 菜单拥有的权限列表

    // Getters and Setters
}

2. 数据库表设计

假设你使用MySQL数据库,以下是相应的表结构设计:

CREATE TABLE `user` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(255) NOT NULL,
    `password` VARCHAR(255) NOT NULL
);

CREATE TABLE `role` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(255) NOT NULL
);

CREATE TABLE `permission` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(255) NOT NULL,
    `url` VARCHAR(255) NOT NULL
);

CREATE TABLE `menu` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(255) NOT NULL,
    `url` VARCHAR(255) NOT NULL
);

CREATE TABLE `user_role` (
    `user_id` BIGINT,
    `role_id` BIGINT,
    PRIMARY KEY (`user_id`, `role_id`),
    FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),
    FOREIGN KEY (`role_id`) REFERENCES `role`(`id`)
);

CREATE TABLE `role_permission` (
    `role_id` BIGINT,
    `permission_id` BIGINT,
    PRIMARY KEY (`role_id`, `permission_id`),
    FOREIGN KEY (`role_id`) REFERENCES `role`(`id`),
    FOREIGN KEY (`permission_id`) REFERENCES `permission`(`id`)
);

CREATE TABLE `menu_permission` (
    `menu_id` BIGINT,
    `permission_id` BIGINT,
    PRIMARY KEY (`menu_id`, `permission_id`),
    FOREIGN KEY (`menu_id`) REFERENCES `menu`(`id`),
    FOREIGN KEY (`permission_id`) REFERENCES `permission`(`id`)
);

3. 服务层实现

实现用户、角色、权限和菜单的服务层逻辑。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    // 其他方法...
}

@Service
public class RoleService {
    @Autowired
    private RoleRepository roleRepository;

    public List<Role> getAllRoles() {
        return roleRepository.findAll();
    }

    public Role getRoleById(Long id) {
        return roleRepository.findById(id).orElse(null);
    }

    // 其他方法...
}

@Service
public class PermissionService {
    @Autowired
    private PermissionRepository permissionRepository;

    public List<Permission> getAllPermissions() {
        return permissionRepository.findAll();
    }

    public Permission getPermissionById(Long id) {
        return permissionRepository.findById(id).orElse(null);
    }

    // 其他方法...
}

@Service
public class MenuService {
    @Autowired
    private MenuRepository menuRepository;

    public List<Menu> getAllMenus() {
        return menuRepository.findAll();
    }

    public Menu getMenuById(Long id) {
        return menuRepository.findById(id).orElse(null);
    }

    // 其他方法...
}

4. 控制器层实现

实现控制器层逻辑,用于处理前端请求。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    // 其他方法...
}

@RestController
@RequestMapping("/api")
public class RoleController {
    @Autowired
    private RoleService roleService;

    @GetMapping("/roles")
    public List<Role> getAllRoles() {
        return roleService.getAllRoles();
    }

    @GetMapping("/roles/{id}")
    public Role getRoleById(@PathVariable Long id) {
        return roleService.getRoleById(id);
    }

    // 其他方法...
}

@RestController
@RequestMapping("/api")
public class PermissionController {
    @Autowired
    private PermissionService permissionService;

    @GetMapping("/permissions")
    public List<Permission> getAllPermissions() {
        return permissionService.getAllPermissions();
    }

    @GetMapping("/permissions/{id}")
    public Permission getPermissionById(@PathVariable Long id) {
        return permissionService.getPermissionById(id);
    }

    // 其他方法...
}

@RestController
@RequestMapping("/api")
public class MenuController {
    @Autowired
    private MenuService menuService;

    @GetMapping("/menus")
    public List<Menu> getAllMenus() {
        return menuService.getAllMenus();
    }

    @GetMapping("/menus/{id}")
    public Menu getMenuById(@PathVariable Long id) {
        return menuService.getMenuById(id);
    }

    // 其他方法...
}

总结

以上是一个完整的角色及菜单权限管理的实现方案。通过定义实体类、设计数据库表、实现服务层和控制器层,可以有效地管理和控制用户的权限。这种方式不仅能够满足基本的角色权限管理需求,还可以进一步扩展和完善,以适应更复杂的业务场景。

标签:菜单,java,List,private,public,KEY,return,权限,id
From: https://blog.51cto.com/u_16367370/12081437

相关文章

  • springboot+java大学周边房屋出租管理系统
    目录项目介绍技术栈具体实现截图开发核心技术:开发工具和技术详细视频演示核心代码部分展示系统设计操作可行性可行性论证系统测试个人心得详细视频演示源码获取方式项目介绍本javaweb+maven项目采用的数据库是Mysql,使用Springboot框架开发,十分方便,也具有跨平台的优......
  • EmployeeTest/EmployeeTest.java
    Employee.javaimportjava.time.LocalDate;publicclassEmployee{//3个字段,用来存放将要操作的数据privateStringname;privatedoublesalary;privateLocalDatehireDay;//通过Generate...生成后修改publicEmployee(Stringname,doub......
  • Java-数据结构-排序-(二) (๑¯∀¯๑)
    文本目录:❄️一、交换排序:    ➷ 1、冒泡排序:    ▶代码:     ➷ 2、快速排序:          ☞基本思想:          ☞方法一:Hoare法    ▶代码:           ☞方法二:挖坑法  ......
  • springboot-ssm-java企业客户关系满意度评价管理系统 o1iv4
    目录项目介绍技术栈具体实现截图开发核心技术:开发工具和技术详细视频演示核心代码部分展示系统设计操作可行性可行性论证系统测试个人心得详细视频演示源码获取方式项目介绍本javaweb+maven项目采用的数据库是Mysql,使用Springboot框架开发,十分方便,也具有跨平台的优......
  • 【JavaSE】Java注解
    什么是注解         我们最早使用的注解有:方法重写@Override,在编译期间进行硬性检测,加在方法上就表明该方法是从父类重写过来的。        Java注解(Annotation)又称Java标注,它可以用来对类、方法、属性、参数、包等进行标注,然后让编译器或运行时其他类进......
  • Java 方法传参机制
    普通变量传参在Java中,一个方法可以选择需要参数或者无需参数,当方法需要参数时,传入参数都发生了什么变化是一个非常值得研究的问题,由此而来,我已自己所学来简单讲解一下其中的机制。实例1这是一个交换两个数值的方法,方法传入了两个形参a和b,交换之后并打印出来。class......
  • 基于Java Springboot 超市云购物系统
    一、作品包含源码+数据库+设计文档万字+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue3、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA数据库:MySQL8.0数据库管理工具:Navicat10以上版本环境配置软件:JDK......
  • 基于Java Springboot 共享单车管理系统
    一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue3、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA数据库:MySQL8.0数据库管理工具:Navicat10以上版本环境配置软件......
  • 基于Java Springboot 中医学习服务管理系统
    一、作品包含源码+数据库+设计文档万字+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue3、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA数据库:MySQL8.0数据库管理工具:Navicat10以上版本环境配置软件:JDK......
  • 基于Java Springboot 共享单车管理系统
    一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue3、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA数据库:MySQL8.0数据库管理工具:Navicat10以上版本环境配置软件......