金字塔:多个资源工厂——如何

2024-02-20

我有一个简单的根资源工厂:

class Root:
    __acl__ = [
        (Allow, Authenticated, 'edit')
    ]

现在对于一些“特殊”路线,我需要创建另一个资源工厂

config.add_route('special', '/special/test', factory=SpecialFactory)

class SpecialFactory:
    __acl__ = [
        (Allow, Authenticated, 'special_edit')
    ]

现在,我想做Root的父母SpecialFactory——我该怎么办呢?

这是正确的方法吗...

class SpecialFactory:
    def __init__(self, request):
        self.request = request
        self.__parent__ = Root(request)
        self.__name__ = 'special'

    __acl__ = [
        (Allow, Authenticated, 'special_edit')
    ]

我也不明白这样做的目的__name__完全以及应该设置什么。

另外,金字塔什么时候会穿越__parent__链什么时候不?对于这样的视图配置:

@view_config(route_name='special', permission='special_edit')
def something(req):
    pass

金字塔将“收集”这两种权限(special_edit and edit) 或仅一个 (special_edit)?

请详细解释一下计算权限的“流程”。


__name__仅在通过遍历生成 url 时才会考虑,因此不必担心。

首先,工厂参数是工厂。意思是,它是接受一个的“某个对象”request对象,并期望收到一个实际上是树的根的对象。

class Root:
    def __init__(self, request):
        self.request = request

def resource_factory(request):
    return Root(request)

add_route(..., factory=resource_factory)

请注意,这里的工厂是多么明显。常用的快捷方式是利用构造对象实例实际上返回自身的事实。所以Root(request)从外面看起来完全一样,并返回相同的对象resource_factory(request).

太好了,现在我们有了一个“根”对象,可以从它开始遍历。当然,这不一定是树的实际根,它只是遍历应该开始的地方。

您还没有添加traverse论证你的add_route,所以遍历不会去任何地方,它只会返回根对象作为上下文。查找上下文对象是遍历练习的全部目标。

所以,现在我们有了一个背景。耶。

金字塔的授权通过将用户的“有效主体”与“上下文”和“权限”相结合来发挥作用。您的授权策略将使用这三件事来确定是否允许或拒绝操作。

“有效主体”来自身份验证策略,代表请求背后的用户。

“上下文”和“权限”是你想要的任何内容。大多数情况下它们是request.context和视图的许可,但是pyramid.security.has_permission()可以接受任何上下文对象和任何权限,并向您返回允许或拒绝结果。

因此,我们已经获得了授权所需的 3 项内容。那么,如何授权呢?这取决于授权政策。默认情况下,ACLAuthorizationPolicy。那么它是怎样工作的?

The ACLAuthorizationPolicy开始于context并通过该对象的“血统”向后追溯。 “谱系”被定义为通过遵循每个对象的__parent__回到终点,再也没有了__parent__跟随。所以在你的例子中,上下文将是一个实例SpecialFactory,上下文的“血统”是列表[ SpecialFactory(request), Root(request) ].

ACL 匹配的工作方式(在ACLAuthorizationPolicy)是它从上下文到根遍历谱系中的每个对象,搜索每个对象的__acl__为了。它找到的第一场比赛就是胜利者。 ACL 中的条目由“(Allow or Deny, principal, permission)”并且匹配是 ACL 中的一个条目,它包含我们正在查找的相同权限,因为主体与当前用户的有效主体列表中的主体之一相匹配。一旦找到匹配项,搜索就会停止,并且返回结果。

如果此算法不适合您,请更换授权策略。它具有高度可插拔性,并且默认实现很容易理解(总共只有几行代码)。您甚至可以制定自己的策略,根本不关心上下文,此时您可以忽略所有这些遍历废话。由你决定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

金字塔:多个资源工厂——如何 的相关文章

  • 如何在 Windows 64 上安装 NumPy?

    NumPy 安装程序在注册表中找不到 python 路径 无法安装 需要 Python 2 5 版本 但在注册表中未找到该版本 OK 我必须修改注册表吗 我已经修改了 PATH 以指向Python25安装目录 我可以检查一下您使用的是什么安
  • Python 3 os.urandom

    在哪里可以找到完整的教程或文档os urandom 我需要获得一个随机 int 来从 80 个字符的字符串中选择一个字符 如果你只需要一个随机整数 你可以使用random randint a b 来自随机模块 http docs pytho
  • 递归 lambda 表达式可能吗?

    我正在尝试编写一个调用自身的 lambda 表达式 但我似乎找不到任何语法 或者即使它是可能的 本质上我想将以下函数传输到以下 lambda 表达式中 我意识到这是一个愚蠢的应用程序 它只是添加 但我正在探索可以在 python 中使用 l
  • 如何在Python中流式传输和操作大数据文件

    我有一个相对较大 1 GB 的文本文件 我想通过跨类别求和来减小其大小 Geography AgeGroup Gender Race Count County1 1 M 1 12 County1 2 M 1 3 County1 2 M 2
  • python 中的并行处理

    在 python 2 7 中进行并行处理的简单代码是什么 我在网上找到的所有示例都很复杂 并且包含不必要的代码 我该如何做一个简单的强力整数分解程序 在每个核心 4 上分解 1 个整数 我真正的程序可能只需要2个核心 并且需要共享信息 我知
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • 如果未引发异常,则通过 Python 单元测试

    在Python中unittest框架 是否有一种方法可以在未引发异常的情况下通过单元测试 否则会因 AssertRaise 而失败 如果我正确理解你的问题 你could做这样的事情 def test does not raise on va
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • 没有名为 StringIO 的模块

    我有Python 3 6 我想从另一个名为 run py 的 python 文件执行名为 operation py 的 python 文件 In operation py I do from cStringIO import StringI
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 在 matplotlib 中的极坐标图上移动径向刻度标签

    From matplotlib 示例 http matplotlib org examples pylab examples polar demo html import numpy as np import seaborn as sbs
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • Matplotlib 中 x 轴标签的频率和旋转

    我在下面编写了一个简单的脚本来使用 matplotlib 生成图形 我想将 x tick 频率从每月增加到每周并轮换标签 我不知道从哪里开始 x 轴频率 我的旋转线产生错误 TypeError set xticks got an unexp
  • 如何在 pandas 中使用 read_fwf 跳过空行?

    I use pandas read fwf http pandas pydata org pandas docs stable generated pandas read fwf htmlPython pandas 0 19 2 中的函数读
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS

随机推荐

  • 将一串数字转换为十六进制并返回十进制 pandas python

    我目前有一串值 是在过滤 csv 文件中的数据后检索到的 最终我必须对数据进行一些过滤 但我有与列表 数据帧或数组相同的数字 我只需要获取字符串中的数字并将它们转换为十六进制 然后获取十六进制的前 8 个数字并将其转换为字符串中每个元素的十
  • 如何在多个存储过程上使用事务?

    您能否在一个存储过程中启动一项事务 然后在嵌套过程中回滚或提交它 提交和回滚有不同的效果 COMMIT 递减 TRANCOUNT ROLLBACK 将其推回到零 发生这种情况是因为 SQL Server 并不真正支持嵌套事务 如果您在嵌套存
  • Angular 6 延迟加载路线

    我想在我的项目中为管理员添加延迟加载路由 我使用 ASP Net Core 后端和 Angular 6 前端 因此我的编译代码输出目录是 wwwRoot Angular dist 当我编译项目时 我看到那里存在文件 admin admin
  • 为什么文件范围静态变量必须为零初始化?

    C 默认初始化不会将具有自动存储的变量清零 为什么要对静态存储变量进行特殊处理 C 和 C 定义的东西必须兼容吗 如果是这种情况 为什么 C 决定进行零初始化 如果文件范围静态变量提供了初始化程序 它们将首先被零初始化 然后再次被常量 动态
  • 当许多键具有相同的哈希码时,Java 8 的 HashMap 如何退化为平衡树?

    当许多键具有相同的哈希码时 Java 8 的 HashMap 如何退化为平衡树 我读到密钥应该实现Comparable定义排序 HashMap如何结合散列和自然排序来实现树 没有实现的类怎么办Comparable 或者当多个 不可相互比较时
  • 如何快速绘制数千个圆圈?

    我正在尝试绘制几个 数千个 圆形对象 我没有太多使用 python 的经验 我有兴趣指定位置 半径和颜色 有没有更有效的方法来达到相同的结果 import matplotlib pyplot as plt xvals 0 1 2 3 yva
  • iOS 推送其他应用的通知

    有没有办法接收所有应用程序的所有推送通知 那么所有通知都显示在通知中心吗 如果是 是否也可以在收到来自任何应用程序的任何推送通知时执行操作 Thanks 编辑 该应用程序是否会被苹果接受并不重要 推送通知将发送到注册接收通知的应用程序 您无
  • 使用 capistrano+nginx 在单个数字海洋 Droplet 中部署多个 Rails 应用程序

    我有一个在 IP xxx xxx xxx xx 的数字海洋服务器上运行的 Rails 应用程序 使用 Capistrano 部署现在很容易运行 现在我正在考虑使用 capistrano 将另一个应用程序部署到同一服务器 经过多次尝试研究我没
  • 应用程序强制退出并重新启动后如何恢复 NSURLSession 下载过程?

    我已经实施了NSURLSession用于从我们的服务器下载相当大的文件 现在 只要我在前台或后台工作并返回应用程序 交易就会正常工作并完成 但如果我强制退出使用多任务屏幕的应用程序 然后再次重新打开应用程序 下载过程尚未完成 尽管据我从文档
  • Twitter Bootstrap 响应式导航栏在小屏幕上损坏

    我一直在阅读文档并将我的代码与 Bootstrap 的示例进行比较 但我无法弄清楚为什么当我缩小浏览器窗口或在手机上查看它时 我网站上的导航栏会下降约 100px http warm ocean 8133 herokuapp com htt
  • 将负颜色数转换为 HEX 或 RGB

    我从未见过像这样的颜色代码 1 16777216 256等等 所以我当前的问题是这样的 我们有一个第三方软件 您可以在其中对值进行颜色编码 如下图所示 现在我正在创建一个显示这些值的 PHP 报告 但我还想使用与软件中定义的颜色相同的颜色来
  • 如何理解卡方列联表

    我有几个分类特征 Gender Married Dependents Education Self Employed Property Area from scipy stats import chi2 contingency chi2 p
  • android DatePickerDialog只显示一个按钮

    我知道有很多问题DatePickerDialog正如这篇文章所解释的Jelly Bean DatePickerDialog 有办法取消吗 https stackoverflow com questions 11444238 jelly be
  • socket.io - 数百个请求而不是一个连接

    我创建了一个简单的应用程序来从socket io开始 但是当我运行它时 Chrome 在其他浏览器中测试 结果相同 占用了我所有的CPU并发出许多请求 我是套接字新手 但我确信这不是它应该如何工作的 在浏览器中运行的代码非常简单 它应该连接
  • MySQL 中的累计计数(*)

    想象一个 SQL 表votes 有两列vote and time vote是一个字符串 time是一个时间戳 我想从表中检索 累积计数 所以 表格看起来像这样 vote time stuart 1443000000 stuart 14430
  • 如何在 PHP 中运行 bind_param() 语句?

    我正在尝试使以下代码正常工作 但无法访问execute line mysqli this gt ConnectLowPrivileges echo Connected br stmt mysqli gt prepare SELECT nam
  • 调试引用 IIS 中运行的 Sqlite 的 ASP.NET Core 应用程序时访问被拒绝

    ASP NET Core 2 2 项目参考Microsoft EntityFrameworkCore Sqlite 2 2 3 as a PackageReference 由于用户进程提升 在 IIS Express 中调试应用程序效果很好
  • 如何运行由“lein jar”命令制作的jar?

    这是后续这个问题 https stackoverflow com questions 3390268 how to setup the classpath when running the jar made from lein uberja
  • 如何获取和设置WPF文本框的当前光标位置

    我想从 WPF TextBox 获取当前光标位置 如果一个TextBox包含文本abhishek并且光标在之后闪烁abhi然后我想要那个索引 以便稍后清除后TextBox以编程方式分配一些其他或相同的文本以编程方式我想让光标在 4 个字符后
  • 金字塔:多个资源工厂——如何

    我有一个简单的根资源工厂 class Root acl Allow Authenticated edit 现在对于一些 特殊 路线 我需要创建另一个资源工厂 config add route special special test fac