天天看點

OpenStack公共元件(一)oslo_policy policy1.政策規則表達式

通用政策引擎實作

政策表示為一個目标和一個關聯的規則:

"<target>": <rule>
           

目标特定于執行政策實施的服務。通常,目标引用一個API調用。

政策部分,參見政策規則表達式。

1.政策規則表達式

政策規則可以用兩種形式之一表示:用新政策語言編寫的字元串或清單。字元串格式是首選的,因為它對大多數人來說更容易了解。

在政策語言中,每個檢查被指定為一個簡單的“a:b”對,它比對到執行該檢查的正确類:

類型 文法
使用者角色 role:admin
政策中定義的規則 rule:admin_required
URL檢查 http://my-url.org/check
使用者屬性(通過token擷取):user_id、domain_id或project_id project_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"]]
           

最後,應該提到兩個特殊的政策檢查;政策檢查" @ "将始終接受通路,而政策檢查" !将永遠拒絕通路。(注意,如果一個規則是空清單([])或空字元串(""),這相當于“@”政策檢查。)其中,“!”政策檢查可能是最有用的,因為它允許顯式禁用特定規則。

繼續閱讀