什么是网站版式,建网站 行业 销售额,镇江微信推广平台,深圳电子商务网站 开发一、.security里面的Role要与数据库要一致数据库内如下security配置类SecurityConfig里里面roleName指定后端的权限角色名字如下#xff1a;.requestMatchers(/ward/**).hasAnyAuthority(医生,护士,科室主任,系统管理员…一、.security里面的Role要与数据库要一致数据库内如下security配置类SecurityConfig里里面roleName指定后端的权限角色名字如下.requestMatchers(/ward/**).hasAnyAuthority(医生,护士,科室主任,系统管理员,院长)z这里指定Role的角色名字------就是roleName二、后端内部的角色命名方式要一致后端security在两个类里面设置权限角色名字SecurityConfig配置类CustomUserDetailsService作用把数据库用户信息拿出来给配置类并转换为Spring Security的UserDetails对象public class CustomUserDetailsService implements UserDetailsService { Autowired private UserRepository userRepository; Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 1. 从数据库查找用户 User user userRepository.findByUsername(username) .orElseThrow(() - new UsernameNotFoundException(用户不存在: username)); // 2. 获取用户的角色并转换为Spring Security权限 // 映射数据库中的角色名到权限系统中的角色名 ListSimpleGrantedAuthority authorities user.getRoles().stream() .map(role - { String roleName role.getRoleName(); String authorityName; // 角色名映射 switch (roleName) { case ADMIN: authorityName 系统管理员; break; case DOCTOR: authorityName 医生; break; case NURSE: authorityName 护士; break; case HEAD_NURSE: authorityName 护士长; break; case DEAN: authorityName 院长; break; case PHARMACIST: authorityName 药剂师; break; case PATIENT: authorityName 患者; break; default: authorityName roleName; } System.out.println(角色映射: roleName - authorityName); return new SimpleGrantedAuthority(authorityName); }) .collect(Collectors.toList()); // 3. 转换为Spring Security的UserDetails对象 return org.springframework.security.core.userdetails.User .withUsername(user.getUsername()) .password(user.getPassword()) //密码 .disabled(!user.getEnabled()) // enabled字段 .accountExpired(false) // 根据你的业务需要调整 .accountLocked(false) //是否锁 .credentialsExpired(false) // 是否过期 .authorities(authorities) // 角色 .build(); } }在里面CustomUserDetailsService设置rolename的地方如下String roleName role.getRoleName();String authorityName;三、CustomUserDetailsService设置中英文映射可选我设置了中英文映射因为我后端Rolename是中文security会自动映射成英文再返回给后端如果你本身设置的rolename角色英文模式就不用转了映射模式如下系统管理员----映射---ADMIN医生---映射---DOCTOR四、前端传给后端的role要和后端一致如下我截取了一小部分前端路由的代码在里面的roles---指定可以访问的权限角色名字这里要和后端一致mport type { RouteRecordRaw } from vue-router const routes: RouteRecordRaw[] [ { path: /login, name: Login, component: () import(/views/Login/login.vue), meta: { title: 登录, requiresAuth: false } }, { path: /, component: () import(/layouts/MainLayout.vue), redirect: /dashboard, meta: { requiresAuth: true }, // 父路由统一要求认证子路由无需重复配置 children: [ { path: dashboard, name: Dashboard, component: () import(/views/Dashboard/index.vue), meta: { title: 首页, roles: [系统管理员, 医生, 护士, 院长, 科室主任, 药剂师, 患者, 财务人员] } // 所有角色都能访问 },