【问题标题】:Assigning group permissions in Flask在 Flask 中分配组权限
【发布时间】:2015-06-25 15:58:59
【问题描述】:

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

我想实现以下内容:

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

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

【问题讨论】:

    标签: flask sqlalchemy flask-login flask-security


    【解决方案1】:

    您很可能可以重复使用 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

    【讨论】:

    • 感谢您的建议。我目前使用 Flask-Security 角色来分离组内的常见角色。例如,在每个组中,我指定一个管理员角色、秘书角色、经理角色等。我正在寻找的是一个全局组标识符,该标识符将应用于该组/公司的所有成员。有关组的定义,请参阅我在问题中的链接。
    【解决方案2】:

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

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

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

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

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

    一些有趣的读物:

    Building your own simple permission system 如果您决定自己动手,可能会帮助您入门。

    Related question 解决方案实现 Flask-Principal

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2022-09-28
      • 2017-01-02
      • 1970-01-01
      • 2015-02-16
      • 2019-12-25
      相关资源
      最近更新 更多