各位大佬, 推荐一个 fastapi 用户权限库

35 天前
 xianmofeng3
现在我已经使用了 jwt 生成了一个 token , 我想在解析 token 的时候,顺便校验这个用户或者背后的用户组, 有没有请求这个接口的权限, 我看过 casbin , 好想有点麻烦, 最好就是类似于 django 的那种
1279 次点击
所在节点    Python
13 条回复
fushall
34 天前
不知道楼主老哥是不是用 RBAC 那种的权限管理。

这种的话手写就行了,代码其实没有很多,用了 ORM 直接连表查询就行

RBAC ,其实就是角色表,权限表,权限角色表,再来个用户角色表,四个表,把你系统的用户 ID 和角色放在用户角色表就行。
GeekGao
34 天前
如果只是校验用户和组匹配,很简单,自己撸就行了
GeekGao
34 天前
```python

from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
import jwt

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

def get_current_user(token: str = Depends(oauth2_scheme)):
try:
payload = jwt.decode(token, "your_secret_key", algorithms=["HS256"])
user_id = payload.get("sub")
if user_id is None:
raise credentials_exception
# 在这里,你可以检查用户是否存在以及用户所属的组是否存在
# 例如:user = get_user_from_db(user_id)
# if user is None or not user.group_exists:
# raise credentials_exception
except jwt.PyJWTError:
raise credentials_exception
return user_id

@app.get("/users/me")
async def read_users_me(user_id: str = Depends(get_current_user)):
return {"user_id": user_id}

```
xianmofeng3
34 天前
@fushall 是的老哥,主要是 我不太想在每一个方法都这样联查, 代码有点冗余,或者还有没有更好的方案不过还是谢谢你的回答
xianmofeng3
34 天前
@GeekGao 我懂你意思的 我也是想过这么实现的, 我可能更想做成 user /add_tags put 这样的形式
xianmofeng3
34 天前
@fushall @GeekGao 我看到了有一个叫 fastapi_authz 的项目 两位老哥也可以看看
xianmofeng3
34 天前
@fushall @GeekGao 我看到了有一个剪 fastapi_authz 的 github 项目 两位老哥有空也可以看一下
misoomang
33 天前
casbin 是否可以参考下,主要是整理 rbac 模型数据,剩下的可以通过 middleware 的方式进行权限管控
xianmofeng3
33 天前
@misoomang 好的老哥,除了 casbin 还有别的做法吗?就真的只能联查了吗
gray0
30 天前
xianmofeng3
30 天前
@gray0 好的老哥! 我先看看! 你真的是我的及时雨
xianmofeng3
30 天前
@gray0 另外还想请教一个问题 就是 sqlalchemy async_create_engine 和 PG 数据库一起使用的时候是不是不能设置 schema
gray0
29 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1039952

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX