刚刚了解APIJSON的应用场景,还没有仔细看Demo和APIJSON core。虽然觉得这个东西很有前途,但是不太明白基于Role的权限是怎么实施的,怎么精确到Record的? 另外,用户的登录与否,Request中没有任何痕迹,不知道是怎么实现的?
Activity
TommyLemon commentedon Jan 11, 2019
基于Role的权限,目前是通过 (注解 JavaBean + Verifier 注册) 或者 (扫描 Access 表的权限配置自动注册) 实现的。
假定真实,强制匹配。
开放请求由前端传 @ role;
非开放请求一般是后端 Request 表里 UPDATE 或 INSERT 进去一个 @ role。
不传的话根据 是否登录 默认分配 LOGIN/UNKNOWN 角色
到 AbstractVerifier.verify 校验时:
UNKNOWN: 放行
LOGIN: userId > 0
OWNER: userId = $currentUserId
CONTACT: userId IN( $currentContactIdList )
CIRCLE: userId IN( $currentCircleIdList ) // currentCircleIdList = currentContactIdList.add(currentUserId)
ADMIN: 默认不支持,后端可重写 verifyAdmin 方法来根据业务校验是否为 ADMIN 角色
几乎都是通过在 SQL 加上 userId 的对应条件来实现的。
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java
效果如下:
#12
APIAuto 会通过查 Access 表自动生成文档

http://apijson.org/api
TommyLemon commentedon Jan 11, 2019
是否登录的校验,是通过在 业务层传给 Verifier 判断。
例如 Demo 里就是 login 接口把 userId 存到 session,然后 DemoVerifier.verifyLogin 用 visitorId(也就是传进去的 userId)来判断
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java
dlroachman commentedon Jan 11, 2019
也就是说,为了实现权限还有会话控制,自己的项目中必须要有几个固定的表是吧?具体都是那几个表,分别起到什么作用了?(不好意思,本来应该自己去看或者读文档,但是我在网上翻了好久都没有找到相关的描述。)
TommyLemon commentedon Jan 11, 2019
OWNER, CONTACT, CIRCLE 角色权限需要对应的表里有 userId 这个字段(可在 JSONObject.KEY_USER_ID 统一改名为 user_id 等已有表字段的名称)。
Request 表用存取非开放请求中 参数的数据和结构 的校验配置,还可以对参数增删改(ADD 自动补全 @ role: "OWNER" 等)
https://github.com/TommyLemon/APIJSON/wiki#%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86
访问权限(Access.sql)

远程函数(Funciton.sql)

非开放请求(Request.sql)
