我一直在看这个帖子: http://pythonhosted.org/Flask-Principal/#granular-resource-protection
现在,虽然它的工作方式没有任何问题,但我看不出它是非常有用的,因为在登录时,所有的帖子都被读取,并且EditBlogPostNeed
被添加到标识中。在
想象一下,如果我写的文章超过了正常数量,那么长期来看这不是一个很好的策略,因为我想在访问视图/posts/<post_id>
时检查文章。在
有没有一种方法可以使用Flask Principal
对视图的每个请求进行检查?在
当然,我可以很容易地用一个惰性关系查询和过滤器来绕过它,但是我想使用Flask Principal
。在
虽然FlaskPrincipal是最流行的插件,但它没有必要复杂,在我需要的大多数情况下它都不能工作。我一直试图强迫它按我喜欢的方式工作,但我从来没有成功过。幸运的是,我找到了一个非常简单和轻量级的模块-permission:
使用
首先,您需要通过子类化
Rule
来定义自己的规则,然后 重写check()
和deny()
:然后通过子类化
^{pr2}$Permission
和重写rule()
来定义权限:有4种方法可以使用上面定义的
UserPermission
:1。用作视图装饰器
2。在视图中使用代码
3。在视图中使用代码(使用
with
语句)4。在Jinja2模板中使用
首先,您需要将定义的权限注入模板上下文:
然后在模板中:
我不确定我完全理解你的问题,但这可能会有帮助。在Flask应用程序中,我使用Flask Principal作为角色权限,比如admin和editor,我还使用它来进行粒度资源保护,如Flask-Principal docs中所述。在我的例子中,我检查用户是否有访问特定帐户的权限。在每个视图中,都会加载标识并检查权限。在
在视图中:
自定义权限:
^{pr2}$在标识加载器函数中:
我在这个话题上所能找到的一切似乎都过于迟钝。虽然不是我最初想要的,但我决定在视图函数中手动处理这个问题。它更显式,减少了对数据库的额外查询。请注意,我仍然使用
flask-security
作为其现成的基于角色的身份验证(这仍然是通过flask-principal
通过其@roles_accepted('role')
修饰符实现的)。在相关问题 更多 >
编程相关推荐