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

java实现角色及菜单权限

时间:2024-09-25 15:28:25浏览次数:3  
标签:菜单 java name private role 权限 id permissions

在Java中实现角色及菜单权限通常涉及几个关键组件:用户(User)、角色(Role)、权限(Permission)以及它们之间的关系。下面我将概述一个基本的实现方案,包括数据库设计和代码层面的处理。

1. 数据库设计

表设计

  • 用户表(users)
  • user_id (主键)
  • username
  • password
  • ...
  • 角色表(roles)
  • role_id (主键)
  • role_name
  • ...
  • 权限表(permissions)
  • permission_id (主键)
  • permission_name
  • description
  • ...
  • 用户角色关联表(user_roles)
  • user_id (外键)
  • role_id (外键)
  • 角色权限关联表(role_permissions)
  • role_id (外键)
  • permission_id (外键)

2. 实体类设计

实体类示例

  • User.java
 public class User {  
 
     private Long userId;  
 
     private String username;  
 
     private String password;  
 
     // 省略getter和setter  
 
 }
  • Role.java
 import java.util.List;  
 
   
 
 public class Role {  
 
     private Long roleId;  
 
     private String roleName;  
 
     private List<Permission> permissions; // 可以是懒加载的  
 
     // 省略getter和setter  
 
 }
  • Permission.java
 public class Permission {  
 
     private Long permissionId;  
 
     private String permissionName;  
 
     private String description;  
 
     // 省略getter和setter  
 
 }

3. 关系映射

使用JPA或MyBatis等ORM框架进行关系映射。

示例(JPA)

  • Role.java 中添加注解映射关系
 @Entity  
 
 @Table(name = "roles")  
 
 public class Role {  
 
     @Id  
 
     @GeneratedValue(strategy = GenerationType.IDENTITY)  
 
     private Long roleId;  
 
  
 
     @Column(name = "role_name")  
 
     private String roleName;  
 
  
 
     @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)  
 
     @JoinTable(  
 
         name = "role_permissions",  
 
         joinColumns = @JoinColumn(name = "role_id"),  
 
         inverseJoinColumns = @JoinColumn(name = "permission_id")  
 
     )  
 
     private List<Permission> permissions;  
 
  
 
     // 省略getter和setter  
 
 }

4. 权限检查

  • 服务层:实现一个权限检查服务,根据用户ID或用户名查询其角色和权限,然后进行权限验证。
  • 拦截器/过滤器:在请求处理前,使用拦截器或过滤器检查用户是否有执行当前操作的权限。

5. 示例权限检查逻辑

 public boolean hasPermission(User user, String permissionName) {  
 
     // 假设通过某种方式获取用户的所有权限  
 
     List<Permission> permissions = userService.getPermissionsByUser(user);  
 
     for (Permission permission : permissions) {  
 
         if (permission.getPermissionName().equals(permissionName)) {  
 
             return true;  
 
         }  
 
     }  
 
     return false;  
 
 }

总结

这个方案提供了一个基础的框架,用于在Java应用程序中实现角色和菜单权限的管理。你可以根据自己的需求调整数据库设计、实体类、关系映射以及权限检查逻辑。在实际应用中,可能还需要考虑权限的继承、更复杂的角色结构、权限的动态配置等问题。

标签:菜单,java,name,private,role,权限,id,permissions
From: https://blog.51cto.com/u_15355350/12109596

相关文章

  • 基于java实验室仪器设备管理系统的计算机毕设源码+论文
    摘要实验室仪器设备管理系统是一个基于Internet,采用B/S(Browser/Server,浏览器/服务器模式)模式,并根据现有的实验室仪器设备管理系统的现状而设计开发的服务于实验室仪器设备管理行业网络管理平台。本文以JSP为开发技术,实现了一个实验室仪器设备管理系统。该信息管理系统分为管理员......
  • 03.Java方法详解
    1.何谓方法?Java方法是语句的集合,在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:一个方法只完成1个功能,有利于后期扩展定义:类似c++里的函数,是一段用来完成特定功能的代码片段,一般定义......
  • Java 初学 day05
    Javaday051、面对对象1、面对对象和面对过程的区别面对过程思想:代表语言C语言功能开发中的每一步都是自己参与的面对对象思想:代表语言Java语言指的是不断创建对象,指挥对象完成事情的思想2、举例生活中的例子​ 接水:​ 面对过程思想:自己拿水杯,自己走到饮水机前,自......
  • java中的向下转型
    当我们构建一个父类引用指向子类对象的时候,该对象只能调用子类已经被重写的方法,而不能调用自己其他的方法,这时候就要用到向下转型classZi1extendsFu1{@Overridepublicvoidfun1(){System.out.println("李刚现在开始好好学习,天天向上!");}pub......
  • 最强Java100道核心面试题
    1.讲讲你理解的nio和bio的区别是啥,谈谈reactor模型。IO(BIO)是面向流的,NIO是面向缓冲区的BIO:BlockIO同步阻塞式IO,就是我们平常使用的传统IO,它的特点是模式简单使用方便,并发处理能力低。NIO:NewIO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Channel(通道)通......
  • 2024年 Java 面试八股文(25w字)
    Java有哪些数据类型?Java语言的数据类型分为两种:基本数据类型和引用数据类型。1.基本数据类型包括boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和double(双精度浮点型)共8种,如下表所示。基本类型位数字节默认值int3240......
  • Java开发:文件上传和下载
    一、文件上传使用MultipartFile类型接收参数;调用上传有两种方式:方式一:使用curl命令curl-F"file=@/data/filename.txt"http://localhost:8080/upload--verbose方式二:使用html,写一个form表单:同样是POST请求,为何文件上传的功能会慢?其中一个原因是,使用multipart/fo......
  • Java基础部分-运算符
    算术运算符:+,-,*,/,%,++,--inta=10;intb=20;intc=25;intd=25;System.out.println(a+b);System.out.println(a-b);System.out.println(a*b);System.out.println(a/(double)b);//强制转......
  • 程序员必备Java面试题大总结!
    1、Mysql索引1.1索引的类型可以是String类型吗?聚簇索引----数据和索引放一块,像主键索引,具有唯一性(Innodb就是)数据库第一范式:必须要有id,这个id是自带索引的。一般用自增id,字符串可以做id,但是不好,像uuid做的id是随机的,都没有排序!!!不像自增id维护索引的成本会很低1.2什么是......
  • 双token三验证Java实现(解决单token可能存在的问题)
    1.单token存在的问题在正常的业务中,我们经常用到JWT生成单token进行后续的请求验证,但该模式有没有存在什么问题吗?其实是有问题的,主要是token有效期设置长短的问题,如果设置的比较短,用户会频繁的登录,如果设置的比较长,会不太安全,因为token一旦被黑客截取的话,就可以通过此tok......