小编Jes*_*ain的帖子

view_config装饰器中的多个权限?

我正在为基于Pyramid框架的Web应用程序配置访问控制.我正在使用@view_config装饰器为我的视图callables设置权限.我有两个权限,即'read''write'.现在,我希望某些视图需要两个权限.我无法弄清楚如何做到这一点view_config- 我错过了什么,或者是否有其他方法可以做到这一点?

python security permissions web-applications pyramid

9
推荐指数
1
解决办法
999
查看次数

金字塔:检查路线名称的权限

这是不难检查在金字塔某个资源的权限.我想知道如何确定权限类型和与某个路由相对应的资源.

细节.假设我添加了一条路线

config.add_route('resource.edit', '/t/{resource_id:\d+}/edit',
    factory = FactoryFactory('resource') ))
Run Code Online (Sandbox Code Playgroud)

FactoryFactory返回工厂的函数在哪里.在这种情况下,它返回"资源"的工厂,无论可能是什么.后来,我这样做:

@view_config(
    route_name='resource.edit',
    renderer='resource-edit.pt',
    permission='edit'
)
def edit(resource_object, request):
    ...
Run Code Online (Sandbox Code Playgroud)

在某些时候,我将在网站上生成一个链接到的输入元素

request.route_url('resource.edit', resource_id=some_input)
Run Code Online (Sandbox Code Playgroud)

编辑:根据要求,我会给你确切的模板代码,希望这能让你更好地了解情况.我们使用的模板引擎是Chameleon.

    <a href="${request.route_url('resource.edit', resource_id=res.id)}" 
       class="btn btn-info morespacing"><i class="icon-edit"></i>edit</a>
Run Code Online (Sandbox Code Playgroud)

现在我想要的是这样的:

    <a tal:condition="h.route_accessible(request, 'resource.edit', res.id)" 
       href="${request.route_url('resource.edit', resource_id=res.id)}" 
       class="btn btn-info morespacing"><i class="icon-edit"></i>edit</a>
Run Code Online (Sandbox Code Playgroud)

换句话说:我只想在用户有权首先执行编辑操作时才显示此输入元素.


现在,我可以举一个例子说明什么会起作用但对我没有吸引力,因为它不灵活.我编写了一个辅助函数

def can_edit(request, factory_type, res_id):
    resource = FactoryFactory(factory_type)(res_id)
    return has_permission('edit', resource, request)
Run Code Online (Sandbox Code Playgroud)

然后我写

    <a tal:condition="h.can_edit(request, 'resource', res.id)" 
       href="${request.route_url('resource.edit', resource_id=res.id)}" 
       class="btn btn-info morespacing"><i class="icon-edit"></i>edit</a>
Run Code Online (Sandbox Code Playgroud)

这对我来说没有吸引力,因为关于工厂的信息有关许可的信息已被编码到路线中,所以我觉得我应该能够通过简单地提供路线的名称来访问它.


因此,我正在寻找一种方法来仅从 …

python permissions python-2.7 pyramid

8
推荐指数
1
解决办法
1512
查看次数

记住我选择在Eclipse C/C++中显示为数组

在Eclipse for C/C++的调试模式下,您可以右键单击任何作为指针的监视表达式并选择"显示为数组".然后系统会提示您输入数组边界,对于调试运行的其余部分,监视的表达式将根据这些边界显示为数组.

当我终止进程并再次开始调试时,它会记住我观察到的表达式,但之前显示为数组的指针现在只是指针,因此,我必须在每次调试运行中重新构建所有指针.在最近的一个项目中,这已经非常无聊了.

有没有办法让Eclipse记住监视表达式的"显示为数组"选项?

eclipse-cdt

6
推荐指数
1
解决办法
1869
查看次数

桌面图标在Windows中的位置

我的一个朋友想要一个程序,可以"记住"桌面上某些快捷方式的位置,并通过点击按钮恢复这些快捷方式.我说这可能不会太难编码,但经过相当长的一段时间谷歌搜索后,我还没有找到存储桌面图标位置的位置.

所以,我的问题是:Windows 7如何以及在何处记住桌面上图标的位置?

windows windows-7 desktop-shortcut

6
推荐指数
0
解决办法
2072
查看次数

将已建立的 TCP 连接转发到另一个端口上的另一个进程?

在 Linux 机器上,您有一个监听 TCP 端口A的守护进程。但是,它通常会被停止,因为它很少使用并占用大量系统资源。相反,我想做这样的事情:

编写一个侦听端口B的应用程序,并在建立连接后立即执行以下操作: 如果守护程序已停止,则启动它并等待它侦听端口A。现在是困难的部分:以完全透明的方式将客户端连接到守护程序,即客户端不必重新连接端口A。此外,但这与此问题无关,当在一定时间内没有连接时,应用程序将关闭守护程序。

当然,我可以让我的应用程序连接到守护程序并通过管道传输所有通信。我不要那个。我想要某种方式将已建立的连接转发到守护程序,然后摆脱连接的套接字,而客户端现在很高兴地与守护程序连接。在某种程度上,我想给守护进程的进程我已经连接的 socket。有没有办法做这样的事情?

如果这很重要,我正在运行 Debian。我想用 C/C++ 编写应用程序,并且可以使用特定于操作系统的解决方案(即使用系统调用)。不过请原谅我,我不是一个 Linux 编码员,所以我对 Linux 系统编程不是很熟悉。如果有一些明显的方法可以做到这一点,我根本不知道。

当然,我愿意接受任何建议。

c sockets linux debian system-calls

5
推荐指数
1
解决办法
1145
查看次数

如何访问嵌套循环内的可变迭代

我时不时地会遇到在循环内借用(或不借用)可变变量的相同问题,最后我坐下来编译了一个最小的示例。因此,代码有点愚蠢,但这是我能想到的最短版本,突出了问题:

\n
struct Association {\n    used: bool,\n    key: usize,\n    value: String,\n}\n\nimpl Association {\n    fn new(key: usize, value: &str) -> Self {\n        Association{used: false, key: key, value: value.to_string()}\n    }\n}\n\nfn find_unused<\'a>(data: &\'a mut Vec<Association>) -> Option<&\'a String> {\n    for k in 0.. {\n        for a in data {\n            if a.key == k && !a.used {\n                a.used = true;\n                return Some(&a.value);\n            }\n        }\n    }\n    None\n}\n\nfn main() {\n    let mut assoc = vec![\n        Association::new(7, "Hello"),\n        Association::new(9, "World")\n    ];\n\n    println!("{}", find_unused(&mut assoc).unwrap());\n    println!("{}", find_unused(&mut assoc).unwrap());\n}\n …
Run Code Online (Sandbox Code Playgroud)

iterator mutability rust borrow-checker

5
推荐指数
1
解决办法
356
查看次数

LESS 在 IE11 中不起作用 - 为什么?

我有以下示例:

<style type="text/less">
@bg: black;
@fg: white;
body {
 background-color: @bg;
 color: @fg;
}
</style>

<script type="text/javascript" language="JavaScript"
  src="http://cdnjs.cloudflare.com/ajax/libs/less.js/1.7.3/less.js">
</script>
<title> test </title>
</head>

<body>
test

<script type="text/javascript" language="JavaScript">
  alert("test");
</script>

</body>

</html>
Run Code Online (Sandbox Code Playgroud)

它在 Firefox、Chrome 和 Opera 中显示 JavaScript 警报和黑底白字。出于某种原因,它在 IE11 中不起作用:正在显示警报,但不会发生 LESS 解析。我让 IE11 开发人员工具在所有例外情况下都中断,但似乎没有任何问题。

警报出现是因为我担心 Internet Explorer 可能根本不会执行脚本,但显然情况并非如此。

顺便说一句,我也用早期版本试过这个

https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.min.js
Run Code Online (Sandbox Code Playgroud)

而不是来自cdnjs.cloudflare.com,也没有运气。

据我所知,IE11 应该支持 LESS。如果有人知道为什么它不起作用,我将不胜感激。

编辑这似乎是我的 Internet Explorer 配置的问题。我在一台 Windows 2008 R2 机器上,我所有的 Internet Explorer 设置都是默认的。

javascript css internet-explorer less web

3
推荐指数
1
解决办法
1957
查看次数

将大型const结构传递给函数

假设我使用GCC 5.4 -O2-O3优化级别编译以下内容.

typedef struct {
  int data[90];
} huge_t;

int foo( const huge_t bar );

// ...

huge_t x = { 0 };
foo(x);
Run Code Online (Sandbox Code Playgroud)

在这里,我冒昧地说,没有必要x在堆栈上创建第二个副本,因为foo它不是(应该是)修改它的参数.(何时)海湾合作委员会会得出同样的结论?

换句话说,为方便起见,我可以使用const类型的参数huge_t,还是应该使用指针?我可以想象两个版本在某种意义上都是"好的风格",并且非常欣赏一个知情的观点.

c optimization gcc const

3
推荐指数
1
解决办法
668
查看次数