springboot+AOP+自定义注解+RBAC自定义操作权限管理02!经过上一次的凑话部署,我们这一次,增加了一个后端管理系统菜单栏的访问权限的数据表。用角色表,和这张菜单栏的数据表进行映射。不同的角色,可以看见不同的菜单栏目。
这个就是菜单栏的表格设计情况。
这个就是角色表和菜单栏表格的映射表(中间表)。
经过这次修改后,我们的另外一个表就需要进行一些稍微的变化 。因为我们已经具备了角色和菜单栏的关系组合了。不再需要像之前那样笨拙的一点一点设计了。
如图,不同的角色,对应各自不同的menu_id。角色各自有各自的菜单功能组合了。
如图,我们设计了很多菜单的入口,所有的菜单入口地址都在这张表内。
哪个角色想有权限访问它们,只需要在关系表内加入数据即可。
package com.yrl.managedemo.bean;
import lombok.Data;
import javax.persistence.*;
import java.util.List;
@Data
@Entity
@Table(name = "tb_role")
public class Role {
@javax.persistence.Id
@org.springframework.data.annotation.Id
@GeneratedValue(strategy= GenerationType.IDENTITY)//主键生成策略
private Integer id;
@Column(name="role_name", nullable=false)
private String roleName;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "tb_role_menu",joinColumns = {@JoinColumn(name = "role_id")},inverseJoinColumns = {@JoinColumn(name = "menu_id")})
List<Menu> menuList;
}
由于我们增就了角色和菜单的映射,所以,role角色的实体类里面应该新增一个list<Menu>集合。来存储对应的菜单情况。
package com.yrl.managedemo.bean;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Data
@Entity(name = "tb_menu")
public class Menu {
@javax.persistence.Id
@org.springframework.data.annotation.Id
@GeneratedValue(strategy= GenerationType.IDENTITY)//主键生成策略
private Integer id;
private String menu;
}
这个是菜单的实体类。毕竟简单。没有什么好多说的。
@GetMapping("/list")
public Result<User> getUser(){
Result<User> result = new Result<>();
List<User> userList = userService.getAllUser();
for(User u:userList){
System.out.println("用户id"+u.getId());
System.out.println("用户名字"+u.getName());
//获取用户权限的列表信息
List<Role> roleList = u.getRoleList();
for(Role role :roleList){
System.out.println("用户的角色信息:"+role.getRoleName()+";");
System.out.println("******该用户可以访问的菜单栏目start:*****");
List<Menu> menuList = role.getMenuList();
for(Menu menu :menuList){
System.out.println(menu.getMenu()+";");
}
System.out.println("******该用户可以访问的菜单栏目end:*****");
}
}
result.setCode(200);
result.setMsg("信息查询成功");
result.setData(userList.get(0));
return result;
}
我们再次修正完善了一下,返回一个结果对象,到前端就可以看见返回的user信息了。里面自然也就包含了对应的菜单权限和角色情况了。