🌲[bamboo] 用户认证和权限管理

项目地址: GitHub - bamboo-cms/bamboo: A CMS optimized for conference hosting
难度:复杂

  • 实现用户认证功能:登录、登出
  • 根据用户权限控制不同的访问限制
  • 支持管理员对用户权限进行修改

依赖:🌲[bamboo] 创建数据库模型类

我要认领(uncle-lv)

1 个赞

我看了数据库原型,似乎只有一个用户多对一角色的权限结构,没有涉及到比较复杂的RBAC架构。
任务难度为什么会是复杂,不会有陷阱吧(

哈哈,没有陷阱。第三点我本来想的是前后端都要实现,现在看优先实现后端就好

只是确保你没有理解错误,用户——角色应该是多对一

权限结构已经做了简化,只分出了三个权限(不像django auth那样每个model对应CRUD四个权限)

但这里面要实现得「好用」还是需要一定的经验,我理想中应该是一个这样的装饰器

@require_auth(permission=MANAGE_CONTENT)
def do_something():
    ...

另外这个登录认证也要暴露给 openAPI spec,请 @greyli 确认下APIFlask是否支持

支持的,类似这样:

app.config['SPEC_DECORATORS'] = [app.auth_required(auth)]
app.config['DOCS_DECORATORS'] = [app.auth_required(auth)]

@Farmer-Chillax 上个 sprint 实现的功能:wink:

2 个赞

OK

flask-httpauth应该能满足我们的需求

另外这个功能需要实现SSO吗?如果不需要的话,我考虑使用单纯的JWT实现

APIFlask 已经内置了,详见Authentication - APIFlask

1 个赞

对。主要是我不知道flask-httpauth符不符合我们的要求,所以直接链接到文档了

请问这个permissions的含义是什么

权限的具体设计在 @frostming 画的这个表里(右上角)。我理解是希望用位运算来表示不同的权限组合,大致可以参考这篇博客

grey 正解

了然

我倾向于使用JWT来认证和鉴权,但是JWT签发后是无法撤回的(服务端不保存用户的登录状态)。在这方面有什么要求吗?

为啥要撤回呢?什么情况要撤回?比方说废弃了用户那服务端可以拒绝token。

如果是改了密码的情况确实取消不了登录状态,但我觉得这不是大问题。一般密码是只能本人改的,这样前端就可以主动清除登录态