首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计许可系统的最佳实践

设计许可系统的最佳实践
EN

Stack Overflow用户
提问于 2012-04-17 14:56:43
回答 1查看 2.8K关注 0票数 5

我目前正在开发一个使用金字塔的Python网站。

但我不知道怎么设计许可系统。

系统应该非常灵活:我必须在许多不同的表之间建立连接。

我认为只创建一个表,而不是为每个变体编写一个权限表--我称之为PermissionCollection:

PermissionCollection:

  • permissionCollectionId - PrimaryKey
  • onType =ENUM(“用户”、“教师”、“组”、"COURSE"...)
  • onId =整数

)

和许可表:

PrimaryKey

  • key

  • value

  • permissionCollectionId -
  • permissionId - ForeignKey

我将定义标准PermissionCollections的每一个可能的关系硬编码的来源,如果一个用户,课程,老师.具有特殊权限,我将创建一个新的PermissionCollection并向其添加权限。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-20 01:49:07

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

怎么处理它,这真的取决于你.你可以有一个ACL表

(object_id,允许/拒绝,谁?(组,用户who),权限,订单)

database

  • allow/deny中的
  • object_id是一个唯一的记录id,是这个ACE应该用来do...allow还是拒绝访问
  • 的东西?是一个组、用户名或您想要的任何东西--例如,everyone
  • permission是view_config
  • order中的权限参数,是重要的事情之一--

例如

代码语言:javascript
复制
__acl__ = [
(Deny, Everyone, 'view'),
(Allow, 'group:admin', 'view')
]

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

代码语言:javascript
复制
__acl__ = [
(Allow, 'group:admin', 'view'),
(Deny, Everyone, 'view')
]

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

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

代码语言:javascript
复制
myobject.__acl__ = load_acls(myobject) 

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

例如,您有一个类似于此的站点。

根-带有acl +的页面--不带acl的page1 --带acl的page2

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

也就是说,为了完成这项工作,你必须让位置感知对象了解他们的父母。

但你为什么要这么做?

您可以为任何对象拥有acl,并且对谁可以监视或不监视数据库中的每个对象具有非常细粒度的控制。您也可以在没有数据库的情况下直接将acl放在类对象中。

只要您的acl在属性中,acl金字塔就可以使用它做一些事情。你怎么得到的并不重要。

看看这个

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10193659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档