OpenStack公共组件(一)oslo_policy policy

通用策略引擎实现

策略表示为一个目标和一个关联的规则:

"<target>": <rule>

目标特定于执行策略实施的服务。通常,目标引用一个API调用。

策略部分,参见策略规则表达式。

1.策略规则表达式

策略规则可以用两种形式之一表示:用新策略语言编写的字符串或列表。字符串格式是首选的,因为它对大多数人来说更容易理解。

在策略语言中,每个检查被指定为一个简单的“a:b”对,它匹配到执行该检查的正确类:

类型语法
用户角色role:admin
策略中定义的规则rule:admin_required
URL检查http://my-url.org/check
用户属性(通过token获取):user_id、domain_id或project_idproject_id:%(target.project.id)s
字符串<variable>:’xpto2035abc’
‘myproject’:<variable>
文字project_id:xpto2035abc
domain_id:20
True:%(user.enabled)s

连接操作符and和or是可用的,允许在指定策略时更具表现力。

"role:admin or (project_id:%(project_id)s and role:projectadmin)"

策略语言也有not操作符,允许更丰富的策略规则:

"project_id:%(project_id)s and not role:dunce"

操作符优先级如下:

优先级类型表达式
4组运算(...)
3否运算not ...
2与运算... and ...
1或运算… or …

具有较大优先数的运算符在其他具有较小优先数的运算符之前。

在list表示中,最内层列表中的每个检查都与“and”连接组合在一起—为了通过该检查,所有指定的检查都必须通过。这些最内层的列表然后与“或”连词组合在一起。举个例子,用列表中的列表表示如下规则:

[["role:admin"], ["project_id:%(project_id)s", "role:projectadmin"]]

最后,应该提到两个特殊的策略检查;策略检查" @ "将始终接受访问,而策略检查" !将永远拒绝访问。(注意,如果一个规则是空列表([])或空字符串(""),这相当于“@”策略检查。)其中,“!”策略检查可能是最有用的,因为它允许显式禁用特定规则。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值