gabesullice / attribute_access_policies
此包的最新版本(dev-master)没有可用的许可证信息。
为任何实体提供基于属性的访问策略
dev-master
2017-06-21 15:49 UTC
Requires
This package is not auto-updated.
Last update: 2024-09-15 04:26:06 UTC
README
基于属性的访问策略是实体访问策略模块(Entity Access Policies)定义的政策插件的特殊实现。
属性策略用YAML编写。
概述
在英文中,属性策略看起来是这样的:"如果用户具有某个字段的特定值,并且实体具有某个特定值,则用户应该能够对实体执行X、Y或Z操作。"
在YAML中,它们看起来是这样的
id: 'first_letter_policy' # Arbitrary, unique name. entity_types: ['taxonomy_term'] # Can be a list of any entity types. operations: ['view', 'delete'] # Can be a list of one or many of: 'view', 'update', 'delete' entity_condition: # The condition to evaluate for the entity members: - type: condition property: 'name.0.value' # The field path. These can traverse entity references! operator: 'STARTS_WITH' # See available operators below. comparison: 'a' user_condition: # The condition to evaluate for the user members: - type: condition property: 'name.0.value' operator: 'STARTS_WITH' comparison: 'B'
上述策略将允许任何以字符B
开头的用户查看或删除以字符a
开头的任何分类术语。
让我们变得复杂一些
你可以将你的条件变得非常复杂。可以在member
键下放置两种类型的条件。它们是:condition
和condition_group
。
condition_group
conjunction
- 允许的值是
AND
或OR
。默认值是AND
。
- 允许的值是
members
- 允许的值是更多嵌套的
condition
和condition_group
。默认值是一个空列表。
- 允许的值是更多嵌套的
condition_group
property
- 要评估的实体的值。你可以将其视为属性选择器。你可以通过链接字段来获取深层嵌套的值。你可以在下面了解更多关于路径语法的详情。
operator
- 允许的值包括:
=
<>
<
<=
>
>=
CONTAINS
IN
NOT IN
STARTS_WITH
ENDS_WITH
BETWEEN
NOT BETWEEN
。默认值是=
。
- 允许的值包括:
comparison
- 这是你想要与之比较的值。例如:
10
或'foo'
- 这是你想要与之比较的值。例如:
属性路径
属性路径可以遵循字段名和这些路径的属性。它们可以从多值字段收集值,甚至可以遍历实体引用。
语法很简单,只需将字段名、属性名和索引点用点.
连接起来。
示例:uid.0.name.value
请记住,Drupal中的所有字段实际上都是多值字段。因此,如果你省略了索引,你将得到一个列表的值,而不是单个值。相应地选择你的操作符。你不能将单个值与列表进行比较。这不会5 = [1, 1, 2, 3, 5]
。然而,这会5 IN [1, 1, 2, 3, 5]
工作。