问题标签 [flask-principal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
701 浏览

python - 如何在单元测试中设置 Flask-Principal 身份?

我正在测试一个 Flask 应用程序,该应用程序使用 Flask-Principal 来实现基于角色的权限以及精细的资源保护。我不确定如何处理在发布请求中设置身份。我正在使用其他Flask-Principal 帖子中概述的测试策略。我将查询字符串方法用于获取请求,并且在发布请求中我将 query_string 更改为标题。获取请求通过,但所有发布请求都失败,权限被拒绝。

任何帮助或见解将不胜感激。我认为我的部分问题是对如何以及在何处设置身份缺乏了解。

0 投票
1 回答
2583 浏览

python - 限制 Flask-Admin 的一个视图?

我有一个用于 Flask 应用程序的文件,views.py.

在里面views.py,我在这里设置Flask-Admin了相应的sqlalchemy数据库:

问题。

如何根据用户的级别(使用数据库“testlevel”定义)阻止对“/admin/userview”页面的访问?用户有 3 种品质,两个用户的示例是:

我如何将管理页面限制为只允许使用的人testlevel="admin"?我使用 Flask-Security 吗?烧瓶校长?如果是这样,怎么做?我已经对两者进行了一些修补,到目前为止我还没有得到任何工作。

这是一个示例“/admin/userview”,如下所示:example Flask-Admin

首先,您可以使用各种类级别的属性来配置应该显示什么以及如何显示。例如,column_list 可用于显示某些列或包含来自相关模型的额外列。

例如

或者,您可以覆盖一些 ModelView 方法并实现您的自定义逻辑。

例如,如果您需要为生成的表单提供额外的字段,您可以执行以下操作:

查看flask.ext.admin.contrib.sqlamodel 文档以获取配置属性和方法的列表。谢谢!

0 投票
1 回答
2269 浏览

python - 使用 Flask-Principal 角色填​​充 WTForm MultiCheckboxField

我正在为我的烧瓶应用程序编辑用户页面,我似乎无法弄清楚如何呈现用户的当前角色,就像我处理其他变量一样,例如电子邮件。

这是我的模型、形式和视图:

那么,有谁知道如何让 WTForms 显示所有可用的角色,并检查当前在 user.roles 列表中的角色?

0 投票
1 回答
87 浏览

python - 在运行时向 Python 模块添加属性,以便稍后导入

我在运行时使用循环内的以下内容向模块添加属性:

当我print dir(this_module)从模块调用时,它会显示属性。伟大的!

当我导入模块并尝试在装饰器中使用该属性时,AttributeError会不断抛出异常。为了调试,我调用dir()了导入的模块,并且没有列出任何动态添加的属性!

__all__我什至为 the添加了属性名称,但import *仍然没有!

任何想法都会很棒。另外,请让我知道我可能遗漏的任何术语。我无法在 Google 中找到答案。

--

根据 Kevin 的建议,我在我的 Flask 应用程序中添加了一个字典(而不是他的顶级建议,只是为了便于测试)并将这些属性添加到其中:

在循环:

在使用装饰器的模块中('time_entry' 是一个属性名称,它包含一个类实例):

当我尝试启动服务器时,我现在收到此错误:

0 投票
1 回答
1530 浏览

python - 将 RoleNeed 与 Flask Principal 相结合

我正在尝试创建一个要求用户具有角色 A 或角色 B 的权限。

根据Python Flask Principal文档,以下行创建了一个需要用户具有角色 A 和角色 B 的权限。

您知道如何根据 OR 而不是 AND 创建权限吗?

0 投票
1 回答
1769 浏览

flask - Flask-Admin 基于角色的资源权限

我正在创建一个 Flask-Admin 应用程序,该应用程序需要检查查看、编辑和删除表中某些行的权限。

即,我想:

  • 仅列出用户 ID 与行的所有者 ID 匹配的行
  • 让用户创建一行,如果他们有一定的角色
  • 仅当用户具有特定角色时才允许用户编辑行

我可以考虑重写方法 query()、on_model_change() 等来检查编辑许可,但是:

  • 用户仍然可以通过更改 URL 以显示编辑屏幕来查看该行
  • 我不知道如何将 WTForms 一对多编辑列表限制为仅允许的项目

我怎样才能做到这一点?

0 投票
1 回答
803 浏览

python - 如何使用 Flask-Principal 的 Flask-Login 和 Permission 类隐藏 jinja2 模板引擎中的某些链接?

我正在关注文档并且已经创建了我的 Permission 实例,因此我可以装饰我的路由功能,但是,我不知道如何在模板中隐藏链接。我在这里看到了一个使用角色的答案,但是有没有办法使用 Flask-Principal 的权限呢?

在 Jinja2 模板中隐藏不可访问的链接这里的提问者的回答听起来非常好,但会抛出我的权限,我也不太明白他在做什么,只是他不必重新初始化 jinja2 模板上的权限/角色边。

我的目标是在我学习的过程中了解每个烧瓶扩展的用途。这就是为什么我想知道是否有办法做到这一点,而不必使用 Flask-Security 或丢弃我已经用 Flask-Principal 定义的权限。

0 投票
1 回答
4343 浏览

rest - 通过 Flask-JWT REST API 使用 Flask-Security 角色

我正在构建一个基于 Flask 的 REST API 并使用 Flask-JWT 来处理 JWT 身份验证。我还想使用 Flask-Security 的内置角色管理。但是,Flask-Security 的 @roles_required() 装饰器假定我在失败时显示 Flask 视图。

这是我的令牌端点(按我的意愿工作):

这是对没有任何角色要求的资源的成功响应(仅使用@jwt_required)这也可以按我的意愿工作:

当我对具有所需角色的资源(例如本例中的管理员)执行相同操作时,似乎假设我有一个要显示的页面,例如 /login,但我没有,因为它是一个无头 REST API:

我知道 Flask-Security 在幕后使用 Flask-Principal 进行角色管理(@roles_required 等),它与数据存储区的 RoleMixin 和 UserMixin 相关联,这非常好。但是,如果没有办法让 Flask-Security 只允许资源通过而不使用我的 JWT 标头,那么最好的选择是构建我自己的装饰器,它使用 Flask-Principal 来管理角色。

有人对这个有经验么?这个想法是整个前端可以并且将以我们需要的任何语言构建,这意味着它可能不是 Flask 的模板/视图,而 Flask-Security 似乎正在做的。

感谢您提供任何人都可以提供的见解!

0 投票
1 回答
140 浏览

python - Flask-Principal 在调用 Flask-Login request_loader 之前需要触发异常

一段时间以来,我使用 Flask-Login 来处理传统的用户名/密码身份验证请求,并使用 Flask-Principal 来处理针对后续请求的路由的授权检查。一切都很好。

我现在正在尝试利用 Flask-Login 的“request_loader”装饰器在命中受保护端点的同一请求中处理基于标头的身份验证。

我遇到的问题是 Flask-Principal 的“require”装饰器似乎在 Flask-Login 的“request_loader”之前执行。在下面的示例中,我什至在代码尝试验证用户身份之前就触发了 403 Unauthorized HTTP Exception。

考虑到基于标头的身份验证,我一定错过了一些愚蠢的东西——我相信——因为它在任何端点授权检查之前执行......

烧瓶登录使用:

Flask 主要用途:

编辑:

附带说明一下,Flask 的“before_request”函数似乎在任何其他函数之前被调用,所以理论上,我可能能够从那里处理基于标头的身份验证,但不使用 Flask-Login 函数似乎很脏为此目的而设计...

0 投票
0 回答
112 浏览

python - 应用上下文和 Flask Principal 的问题

我在尝试使用应用程序工厂模式时遇到问题。我有一个工作中的 Flask 应用程序,但代码结构很糟糕。今天我改进了结构,创建了一个更合适的应用程序工厂。

为了访问用户身份,我习惯了以下before_request工作正常。

但是,我将基本应用程序移至

现在授权告诉我它找不到应用程序上下文。

RuntimeError: Working outside the application context

我试图将它移动并尝试使用with app.app_context但没有成功。