创建团队空间
和创建私人空间类似,补充团队空间类型和相关校验即可。
空间成员管理
增删改查
空间权限控制
权限定义
使用JSON定义权限。
创建相应数据模型和根据JSON配置文件获得权限的服务。
使用Sa-Token
引入Sa-Token
导入相应依赖。
Sa-Token默认将数据保存在内存,有数据丢失的风险。可以将其与Redis整合。
基本用法
可以使用StpUtil来进行登录、记录和查询会话信息、查询登录状态等。
还可以使用注解进行鉴权:
1 2 3 4 5 6
| @SaCheckLogin @RequestMapping("info") public String info() { return "查询用户信息"; }
|
空间账号体系
可以使用kit模式实现多账号认证,将空间鉴权与用户和管理员两种角色鉴权分开。
权限认证逻辑
目前请求参数会较为复杂,首先创建上下文类统一请求中的参数。
在获取上下文时,可以根据请求路径来区分id类型。
这里注意,HttpServletRequest 的 body 值是流,读完后就消失。因此需要在config包下自定义请求包装类和请求包装类过滤器。
之后编写权限校验逻辑即可。
权限认证注解
新建Sa-Token配置类,开启注解鉴权和注解合并:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Configuration public class SaTokenConfigure implements WebMvcConfigurer {
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**"); }
@PostConstruct public void rewriteSaStrategy() { SaAnnotationStrategy.instance.getAnnotation = (element, annotationClass) -> { return AnnotatedElementUtils.getMergedAnnotation(element, annotationClass); }; } }
|
新建空间账号体系鉴权注解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
@SaCheckPermission(type = StpKit.SPACE_TYPE) @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface SaSpaceCheckPermission {
@AliasFor(annotation = SaCheckPermission.class) String[] value() default {};
@AliasFor(annotation = SaCheckPermission.class) SaMode mode() default SaMode.AND;
@AliasFor(annotation = SaCheckPermission.class) String[] orRole() default {};
}
|
使用权限注解
在接口上加上相应权限的注解。
对于某些不需要登录就可以使用的接口,需要编程式鉴权。
全局异常处理
将框架的异常处理为自定义的业务异常。
补充获取权限接口
添加返回给前端权限信息的接口。
空间数据管理
使用ShardingSphere进行分库分表
静态分表
直接引入相关配置即可。
动态分表
需要自定义实现动态分表算法。
配置数据库,分表规则和分表算法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| spring: # 空间图片分表 shardingsphere: datasource: names: yu_picture yu_picture: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql: username: root password: 123456 rules: sharding: tables: picture: actual-data-nodes: yu_picture.picture # 动态分表 table-strategy: standard: sharding-column: spaceId sharding-algorithm-name: picture_sharding_algorithm # 使用自定义分片算法 sharding-algorithms: picture_sharding_algorithm: type: CLASS_BASED props: strategy: standard algorithmClassName: com.yupi.yupicturebackend.manager.sharding.PictureShardingAlgorithm props: sql-show: true
|
在实现分表算法后,还需要自行配置分表管理器,并更新到actural-data-nodes
配置中。
之后,可以使用拼接SQL的方式创建分表。