4

我有一个使用 Flask-Security 和 MySQL 的 Flask 应用程序。不幸的是,Flask-Security 不提供组/多租户管理(https://github.com/mattupstate/flask-security/issues/285)。

我想实现以下内容:

  1. 登录时,用户输入他/她的登录凭据。
  2. 查询用户数据库以查看用户属于多少组(管理、会计、销售等)。
  3. 如果用户属于多个组,则会出现一个弹出窗口,列出用户所属的组。
  4. 选择组后,用户登录,并为用户的会话设置全局变量(tenant_id 或 group_id)。然后,此全局变量可用于预过滤用户的任何 DB 搜索。

我不确定如何实现步骤 2 和 4。可以使用 Flask g.object ( http://flask.pocoo.org/docs/0.10/api/#flask.g ) 来实现这样的事情吗?

4

2 回答 2

0

您很可能可以重用 Flask-Security 的角色来进行用户分组,并且仍然保持与您的用例相关。

您可以根据用户拥有的角色以及当他们处于多个角色时执行特定操作,您可以将特定角色存储在会话变量中以跟踪他们现在所处的角色并向他们展示特定于的功能那个角色(组)。

if user_datastore.find_role("db_amin") in current_user.roles:
    ... db admin specific ...

您还可以使用装饰器执行角色特定的路由:

@roles_accepted("db_admin", "db_backup")
@roles_required('db_admin')

文档位于https://pythonhosted.org/Flask-Security/api.html

于 2015-04-27T18:09:39.803 回答
0

Flask 是一个很棒的框架,有许多现成的扩展,但在定制解决方案时通常需要一些麻烦。

由于这似乎是您正在使用的身份验证后端缺少的功能,因此您可以考虑以下几点:

  • 切换到包含组管理的后端
  • 自己滚
  • 扩展当前后端

后两种选择都是劳动密集型的。

一旦你有了组管理,你确实可以使用 flask g 选项。在其中存储对用户对象的引用就足够了。任何查询和过滤车都在后端完成。

一些有趣的读物:

构建自己的简单权限系统如果您决定推出自己的权限系统,可能会帮助您入门。

相关问题解决方案实现Flask-Principal

于 2015-04-21T10:48:08.550 回答