【发布时间】:2012-04-28 22:27:49
【问题描述】:
我目前正在使用 Pyramid 开发一个小型 Python 网站。
但是我不知道如何设计权限系统。
系统应该非常灵活:我必须在许多不同的表之间建立连接。
我没有为每个变体编写一个权限表,而是只创建一个表 - 我称之为 PermissionCollection:
权限集合:
- permissionCollectionId - PrimaryKey
- onType = ENUM("USER","TEACHER","GROUP","COURSE"...)
- onId = 整数
和权限表:
- permissionId - PrimaryKey
- 键
- 价值
- permissionCollectionId - ForeignKey
我将为源中硬编码的每个可能的关系定义标准 PermissionCollection,如果用户、课程、教师...具有特殊权限,我将创建一个新的 PermissionCollection 并向其添加权限。
我对网络编程很陌生,不知道这种方法是否有用。或者,如果这样的事情甚至存在。我认为 Pyramid ACL 不适合这项任务,是吗?
【问题讨论】:
-
大多数 RDBMS 都有一个
GRANT/REVOKE命令,用于允许(在各个级别)访问数据库中的表/模式。其中一些甚至还有用户组的概念,这意味着您可以为整个组执行命令。因此,您可能会尝试在应用程序级别做一些事情,这已经存在于数据库级别(这将更加安全)。 -
但是我的数据库用户不是 GRANT 吗?我的应用程序的用户并不意味着数据库用户
-
GRANTis 适用于数据库用户,是的。但是,如果您编写应用程序来检查权限(基于登录应用程序的人员/内容),您也可以将它们作为特定的数据库用户登录(通常可以在连接字符串中提供这些)。这将有助于审计以及控制访问。 -
谢谢。我误解了这一点。
标签: python sql permissions sqlalchemy pyramid