设计最佳许可制度

2024-10-01 09:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用Pyramid开发一个小Python网站。
但我不知道如何设计许可制度。
系统应该非常灵活:我必须在许多不同的表之间建立连接。
我没有为每个变量编写一个权限表,而是只创建一个表,我称之为PermissionCollection:

权限收集:

  • permissionCollectionId-PrimaryKey
  • onType=ENUM(“用户”、“教师”、“组”、“课程”…)
  • onId=整数

以及权限表:

  • permissionId-主密钥
  • 钥匙
  • 价值
  • permissionCollectionId-ForeignKey

我将为源代码中硬编码的每个可能的关系定义标准权限集合,如果用户、课程、教师。。。拥有特殊权限我将创建一个新的PermissionCollection并向其添加权限。在

我对web编程非常陌生,不知道这种方法是否有用。或者像这样的东西存在。我认为金字塔ACL不是这个任务的正确工具,对吗?在


Tags: 用户pyramid权限网站系统教师整数enum
1条回答
网友
1楼 · 发布于 2024-10-01 09:29:31

不确定你是否已经读过它,但金字塔确实有一个非常好的许可系统。使用ACL进行授权。在

如何处理它,它真的只取决于你。。。 你可以有一个ACL表

(object_id,允许/拒绝,谁?(组,用户ID),权限,顺序)

  • object iu id是数据库中记录的唯一id
  • 允许/拒绝是这个ACE应该做的…允许或拒绝访问
  • 谁?是一个组、用户名或任何你想要的系统。所有人是所有人吗
  • permission是视图配置中的权限参数
  • 秩序是一件重要的事情,秩序很重要

例如

__acl__ = [
(Deny, Everyone, 'view'),
(Allow, 'group:admin', 'view')
]

此示例将始终拒绝查看,即使对于管理员。。。一旦金字塔找到能告诉你是否能看到一个记录的信息,它就会自动停止搜索

^{pr2}$

这将允许每个管理员查看,但不允许任何其他人查看。这就是为什么你必须记住你的王牌顺序。在

有趣的部分就在这里。这一切都很好。您已将acl映射到数据中的记录。例如,当你加载一个页面时。。。您必须加载acl并在对象中设置它们。在

myobject.__acl__ = load_acls(myobject) 

如果你有一个数据树。你甚至不能设置acl。在

例如,你有一个看起来像这样的网站

root
  \ pages with acl
      +   page1  without acl
      \   page2  with acl

当您访问page1时,它将检查父项如果找不到,它将检查父项如果父项有acl,它将检查它的权限,如果没有,它将检查它的父项,直到您到达根目录。如果找不到许可,我不太确定会发生什么。。我想它要么给你一个禁止的错误,要么给你一个谓词错误。它找不到合适的视角。在

这就是说,为了使这项工作,你必须使位置感知对象知道他们的父母。在

但你为什么要这么做?在

您可以对任何对象使用acl,并对谁可以监视数据库中的每个对象进行真正的细粒度控制。您也可以直接将acl放在类对象中而不需要数据库。在

只要你的acl在属性acl金字塔中就可以对它做些什么。你怎么得到的并不重要。在

看看这个

http://pyramid.readthedocs.org/en/1.3-branch/tutorials/wiki/authorization.html

相关问题 更多 >