💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
[TOC] ## RBAC权限设计 权限设计有多种方案比如rbac、abac、acl等。 这里使用的是RBAC基于角色的权限访问控制(Role-Based Access Control) ### 图片说明 用户关联角色,角色关联权限。 所以间接的,用户可以多个权限。 ![](https://box.kancloud.cn/1389d9eec3d9b46b97af0e961fa2c4fe_1278x794.jpg) ### 数据表 | 表名称 | 功能 | | --- | --- | | sys_user | 用户表 | | sys_role | 角色表 | | sys_permission | 权限表 | | sys_role_permission | 角色权限对应表 | | sys_user_role | 角色用户对应表 | ### 主要接口 认证服务器获取用户信息的时候需要调用下面的接口 ~~~ @Service("userDetailsService") @Slf4j public class SqlUserDetailsServiceImpl implements UserDetailsService { @Resource AppUserService userService; @Override public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException { LoginAppUser loginAppUser = userService.findByUsername(name); if (loginAppUser == null) { throw new InternalAuthenticationServiceException("用户名或密码错误"); } return loginAppUser; } } ~~~ 而这里loginAppUser,里面就有涉及到权限这一块! ~~~ @Setter @Getter public class LoginAppUser extends User implements SocialUserDetails { @Override public String getUserId() { return getId() + ""; } private Set<String> permissions; @JsonIgnore @Override public Collection<? extends GrantedAuthority> getAuthorities() { Collection<GrantedAuthority> collection = new HashSet<>(); //更加rbac设置权限 if (!CollectionUtils.isEmpty(getRoles())) { collection = getRoles().stream() .map(role -> role.getPermissions()) .flatMap(Collection::stream) .map(permission -> new SimpleGrantedAuthority(permission.getName())) .collect(Collectors.toList()); } return collection; } @Override public String getUsername() { return getName(); } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } } ~~~ ## 菜单和权限 > 有一些软件系统把菜单和权限放在一起做了,有菜单转化成有对应的权限。 > 而这里fun-cloud是把菜单和权限独立出来。 > 额外使用角色去关联菜单 ### 数据表 | 表 | 功能 | | --- | --- | | sys_role | 角色表 | | sys_role_menu | 角色菜单关联表 | | sys_menu | 菜单表 | ## 界面截图 如下截图:体现了角色、菜单、权限的关系 ![](https://box.kancloud.cn/7e600eec36c343acb461769b1010e53b_2880x1534.jpg)