您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 设计权限系统的最佳实践

5b51 2022/1/14 8:21:14 python 字数 4626 阅读 474 来源 www.jb51.cc/python

我目前正在开发一个使用Pyramid的小型Python网站.但我不知道如何设计权限系统.系统应该非常灵活:我必须在许多不同的表之间建立连接.而不是为我想要创建一个表的每个变体写一个权限表 - 我称之为PermissionCollection:PermissionCollection中:> permissionCollectionId - Prima

概述

我目前正在开发一个使用Pyramid的小型Python网站.
但我不知道如何设计权限系统.
系统应该非常灵活:我必须在许多不同的表之间建立连接.
而不是为我想要创建一个表的每个变体写一个权限表 – 我称之为PermissionCollection:

PermissionCollection中:

> permissionCollectionId – PrimaryKey
> onType = ENUM(“USER”,“TEACHER”,“GROUP”,“COURSE”……)
> onId =整数

和权限表:

> permissionId – PrimaryKey
>关键
>价值
> permissionCollectionId – ForeignKey

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

我对网络编程很陌生,不知道这种方法是否有用.或者,如果这样的事情甚至存在.我认为金字塔ACL不适合这项任务,是吗?

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

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

> object_id是数据库中记录的唯一ID
>允许/拒绝是ACE应该做的事情……允许或拒绝访问
>谁?是一个组,用户名或任何你想要的例子system.everyone是每个人
> permission是view_config中的权限参数
>订单是一件重要的事情

例如

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

即使是管理员,此示例也总是拒绝查看…一旦金字塔找到告诉您是否可以看到记录的内容,它会自动停止搜索

__acl__ = [
(Allow,(Deny,'view')
]

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

有趣的部分实际上在这里.这一切都很好.您已将acl映射到数据中的记录.当您加载例如页面时…您将必须加载acl并将其设置在您的对象中.

myobject.__acl__ = load_acls(myobject) 

如果您有数据树.你甚至不能设置acls.

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

06003

当你访问page1时,它将检查acl是否找不到它,如果父有acl它将检查父,它将检查它的权限,如果不是,它将检查它的父亲,直到你到达根.如果它找不到权限,我不确定会发生什么…我猜它会给你一个禁止错误或谓词错误.它无法找到合适的视图.

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

但是你为什么要这么做呢?

您可以为任何对象获取acl,并且可以对谁可以监视数据库中的每个对象进行非常精细的控制.您也可以在没有数据库的情况下将acl直接放在类对象中.

只要你的acl在属性acl金字塔中就能用它做一些事情.如何得到它并不重要.

看一下这个

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

总结

以上是编程之家为你收集整理的python – 设计权限系统的最佳实践全部内容,希望文章能够帮你解决python – 设计权限系统的最佳实践所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶