Open csx-bill opened 3 months ago
新增一个接口,加上 @PreAuth 注解,方法内部实现就是转发调用 APIJSON 的万能通用接口对应方法
新增一个接口,加上 @preauth 注解,方法内部实现就是转发调用 APIJSON 的万能通用接口对应方法
每个接口都新增接口?
我是想万能通用接口实现 @preauth 权限校验
注解里不允许变量,所以 "sysuser:save" 没法对应万能通用接口中灵活多变的 表名,例如 Moment, Comment 等,应该只对应 User 表。 所以如果要想一个接口兼容各种权限校验,就不要用注解,可以把处理 @preauth 注解的相关代码,直接在 DemoVerifier.verifyAccess 方法内动态调,至于权限的配置,要么代码里写,要么就是你现在加字段的做法。
不过 APIJSON 默认 增、删、改 是要在 Request 表里配置对应的 JSON 结构,里面就必须指定涉及的表,以及对应的 tag 和 version,其实这个就可以具体知道有哪些表,给每个对应请求一一指定 @PreAuth 对应的配置了,不过只要不一个个单独写接口,那仍然不能用注解形式,可以在 Request 表加字段。
apijson-router
因为是使用 apijson-router ,每个crud 都是单独的接口,所以我只想到在 document 表增加了一个字段,存储这个权限,然后根据请求地址,校验这个接口权限
对,是通过一个万能通用接口虚拟出来千变万化的单独“接口”,但注解参数只能是常量,编译运行后就不能变了。 目前 Document 表里加权限字段应该是你这个需求的最优解
对,是通过一个万能通用接口虚拟出来千变万化的单独“接口”,但注解参数只能是常量,编译运行后就不能变了。 目前 Document 表里加权限字段应该是你这个需求的最优解
突然又想到一个方案,就是把tag 作为接口权限,就可以动态校验了, "online:tag" tag 是动态的
tag 值在万能通用接口里也不是固定的,所以是一样的问题,要么就对应每个 tag 都单独写一个接口,要有对应的注解,内部则转发调用万能通用接口对应方法:
@PreAuth("online:User")
@PostMapping("/get/User")
public String getUser(@RequestBody body) {
return getByTag("User", body); // 或 return crudByTag(RequestMethod.GET, "User", body);
}
@PreAuth("online:Comment")
@PostMapping("/post/Comment")
public String postComment(@RequestBody body) {
return postByTag("Comment", body); // 或 return crudByTag(RequestMethod.POST, "Comment", body);
}
要么还是把静态的注解代码改成动态表字段数据配置等形式使用
或者如果处理注解也可以类似 @PostMapping("{method}/{tag}") // 目前这个实测可行,所以只要解析注解 @PreAuth 同样处理即可 这样写变量形式: @PreAuth("{method}/{tag}") 从参数中动态读取 method 和 tag 的值,那也可以一个接口处理所有 method 及 tag 对应的权限
或者如果处理注解也可以类似 @PostMapping("{method}/{tag}") // 目前这个实测可行,所以只要解析注解 @preauth 同样处理即可 这样写变量形式: @preauth("{method}/{tag}") 从参数中动态读取 method 和 tag 的值,那也可以一个接口处理所有 method 及 tag 对应的权限
对,我刚刚想到也是这个方案
Description
在接入 apijson-router ,我想对每个用户访问接口做一个权限校验 例如:在编写代码的时候,接口上面会有一个鉴权权限的注解 (@PreAuth("sysuser:save")) 是否有新增的权限
我想对 apijson-router 的接口也实现类似的功能,有什么更好的方案 我目前是在 document 表增加了一个字段,存储这个权限,实现这个功能