我目前正在用Pyramid开发一个小Python网站。
但我不知道如何设计许可制度。
系统应该非常灵活:我必须在许多不同的表之间建立连接。
我没有为每个变量编写一个权限表,而是只创建一个表,我称之为PermissionCollection:
权限收集:
以及权限表:
我将为源代码中硬编码的每个可能的关系定义标准权限集合,如果用户、课程、教师。。。拥有特殊权限我将创建一个新的PermissionCollection并向其添加权限。在
我对web编程非常陌生,不知道这种方法是否有用。或者像这样的东西存在。我认为金字塔ACL不是这个任务的正确工具,对吗?在
不确定你是否已经读过它,但金字塔确实有一个非常好的许可系统。使用ACL进行授权。在
如何处理它,它真的只取决于你。。。 你可以有一个ACL表
(object_id,允许/拒绝,谁?(组,用户ID),权限,顺序)
例如
此示例将始终拒绝查看,即使对于管理员。。。一旦金字塔找到能告诉你是否能看到一个记录的信息,它就会自动停止搜索
^{pr2}$这将允许每个管理员查看,但不允许任何其他人查看。这就是为什么你必须记住你的王牌顺序。在
有趣的部分就在这里。这一切都很好。您已将acl映射到数据中的记录。例如,当你加载一个页面时。。。您必须加载acl并在对象中设置它们。在
如果你有一个数据树。你甚至不能设置acl。在
例如,你有一个看起来像这样的网站
当您访问page1时,它将检查父项如果找不到,它将检查父项如果父项有acl,它将检查它的权限,如果没有,它将检查它的父项,直到您到达根目录。如果找不到许可,我不太确定会发生什么。。我想它要么给你一个禁止的错误,要么给你一个谓词错误。它找不到合适的视角。在
这就是说,为了使这项工作,你必须使位置感知对象知道他们的父母。在
但你为什么要这么做?在
您可以对任何对象使用acl,并对谁可以监视数据库中的每个对象进行真正的细粒度控制。您也可以直接将acl放在类对象中而不需要数据库。在
只要你的acl在属性acl金字塔中就可以对它做些什么。你怎么得到的并不重要。在
看看这个
http://pyramid.readthedocs.org/en/1.3-branch/tutorials/wiki/authorization.html
相关问题 更多 >
编程相关推荐