允许定义本地权限
项目描述
摘要
此立方体允许使用通用的 CWPermission 实体类型来定义本地权限,您应在您的模式定义中使用它。
CWPermission 实体类型
有一个名称和一个标签
表示通过“require_group”关系与之链接的组具有通过“require_permission”对象关系链接的实体的 <name> 权限。
为了加快速度,自动维护了一个“has_group_permission”关系,所以“P require_group G, U in_group G”等价于“U has_group_permission P”。
客户端立方体应明确为应该具有本地权限的每个类型添加“X granted_permission CWPermission”和“X require_permission CWPermission”,第一个是明确授予的,而第二个是自动传播的。因此,granted_permission的可能主题应该是require_permission的可能主题的子集。
您应在您的模式安全定义中使用require_permission,因为这是自动传播的一个。
配置示例
class granted_permission(RelationDefinition):
subject = 'Project'
object = 'CWPermission'
class require_permission(RelationDefinition):
subject = ('Project', 'Version')
object = 'CWPermission'
class Project(EntityType):
"""a project, only visible to managers and users having the 'view' local permission
"""
__permissions__ = {
'read': ('managers', ERQLExpression('X require_permission P, P name "view", '
'U has_group_permission P'),),
'update': ('managers', 'owners',),
'delete': ('managers', ),
'add': ('managers', 'users',),)
}
class Version(EntityType):
"""a version defines the content of a particular project's release"""
__permissions__ = {
'read': ('managers', ERQLExpression('X require_permission P, P name "view", '
'U has_group_permission P'),),
'update': ('managers', 'owners',),
'delete': ('managers', ),
'add': ('managers', 'users',),)
}
class version_of(RelationDefinition):
"""link a version to its project. A version is necessarily linked to one and
only one project.
"""
__permissions__ = {
'read': ('managers', 'users',),
'delete': ('managers', ),
'add': ('managers', RRQLExpression('O require_permission P, P name "manage",'
'U has_group_permission P'),)
}
subject = 'Version'
object = 'Project'
cardinality = '1*'
此配置表示我们有两个不同的权限(即将到来的CWPermission实体)
一个名为“view”,允许一些用户查看特定的项目和其版本
另一个名为“manage”,提供在项目上创建新版本的权利
现在的想法是,经理将为项目授予权限,然后这些权限将按配置进行传播。您希望使用 cubicweb_localperms.hooks 中的集合来配置当需要时权限应如何传播。在我们的示例中,在您的cube的 hooks.py 中添加如下内容:
from cubicweb_localperms import hooks
# relations where the "main" entity is the object. We could also
# have modified hooks.S_RELS for relations where the "main" entity
# is the subject
hooks.O_RELS.add('version_of')
项目被授予的权限将在创建/删除版本时自动添加/删除。
最后但同样重要的是,在定义 Project 的实体类时,定义 __permissions__ 如下:
class Project(AnyEntity):
__permissions__ = ('view', 'manage',)
这样,当访问项目的“安全”视图(默认情况下在“更多操作”子菜单中)时,您应该会看到一个接口来配置本地权限,其中包含预先填充的正确权限名称的组合框,而不是自由文本输入,这大大降低了错误的风险。
此外,您可以在 cubicweb_localperms 中找到一些函数,用于简化在方案定义中构建rql表达式。上述示例中的函数可以如下编写:
from cubicweb_localperms import xexpr, oexpr
class Project(EntityType):
__permissions__ = {'read': ('managers', xexpr('view'),),
'update': ('managers', 'owners',),
'delete': ('managers', ),
'add': ('managers', 'users',),)
}
class Version(EntityType):
__permissions__ = {'read': ('managers', xexpr('view'),),
'update': ('managers', 'owners',),
'delete': ('managers', ),
'add': ('managers', 'users',),)
}
class version_of(RelationDefinition):
__permissions__ = {'read': ('managers', 'users',),
'update': ('managers', 'owners',),
'delete': ('managers', ),
'add': ('managers', oexpr('manage'),)
}
项目详细信息
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分发
构建分发
cubicweb-localperms-1.0.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | bd603ad3e371e16d387c00640bdd20fc1a56835ce8f0fa4e276e56f01a9d20d7 |
|
MD5 | 3106f891338207b823a8be7998f71dac |
|
BLAKE2b-256 | 1f45adbdc1b9518375781011b0a93dfb80050897e9924698996433a44e6383a3 |
cubicweb_localperms-1.0.0-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 2fd988166759540965469ad9a7969acc60bf1ec73265988b284a15abe1fad968 |
|
MD5 | 1a6b7d3f9782066400089f6401fe820a |
|
BLAKE2b-256 | 842394751ddaae102ce22e999f11e7f31fbf194b0ef90dcd3b5d6f7881faf099 |