Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于Role的设置,会话控制具体怎么和APIJSON联系起来的? #67

Closed
dlroachman opened this issue Jan 11, 2019 · 4 comments

Comments

@dlroachman
Copy link

刚刚了解APIJSON的应用场景,还没有仔细看Demo和APIJSON core。虽然觉得这个东西很有前途,但是不太明白基于Role的权限是怎么实施的,怎么精确到Record的?

另外,用户的登录与否,Request中没有任何痕迹,不知道是怎么实现的?

@TommyLemon
Copy link
Collaborator

TommyLemon commented 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
image

@TommyLemon
Copy link
Collaborator

TommyLemon commented 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
Copy link
Author

也就是说,为了实现权限还有会话控制,自己的项目中必须要有几个固定的表是吧?具体都是那几个表,分别起到什么作用了?(不好意思,本来应该自己去看或者读文档,但是我在网上翻了好久都没有找到相关的描述。)

@TommyLemon
Copy link
Collaborator

TommyLemon commented 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)
image

远程函数(Funciton.sql)
image

非开放请求(Request.sql)
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants