1. 程式人生 > 其它 >【odoo】關於選單及記錄規則中“非”計算的改造

【odoo】關於選單及記錄規則中“非”計算的改造

老韓頭的開發日常【好書學習】系列

隨筆,隨便寫寫

許可權的三種管理:或、與、非

做過odoo二開的人都瞭解,在odoo中,許可權是跟著許可權組走的。

全域性的記錄規則是以“與”的關係進行計算的,需同時滿足才可以。

而非全域性的許可權,是以“或”的規則進行累加的。因此,如果我們需要的許可權大於某個官方基礎模組的許可權組時,我們可以通過新建一個許可權組,然後給這個新的許可權組賦予缺少的許可權即可。這就是我們所說的“或”。但,如果我們需要的許可權正好是小於某個許可權組呢,難道要新建一個組,並完整拷貝已知最接近許可權組A的許可權後去除多餘的許可權嗎?這並不是一個明智的決定。
劃重點
以“完整拷貝已知最接近許可權組A的許可權後去除多餘的許可權”的方式建立新的許可權組,也就以為著該場景下使用者只能是我們新建的許可權組。但是如果後續的二開模組中,由其他的開發人員新建了某個模型,並將該模型的CURD許可權授予許可權組A,並對響應的檢視進行了擴充套件。那麼,屬於我們新建許可權組的使用者,就沒有辦法使用最新的功能了。

那麼針對上面的場景,目前我能想到的最優的解決方案是擴充套件“非”的邏輯。見下圖

一般情況下,我們照常賦予目標使用者許可權A的角色,同時新建一個許可權組,並在禁用選單禁用記錄,中勾選希望去除的記錄。
比如,我們授予了使用者“銷售”模組下“僅自己單據”的角色,但又不希望使用者看到銷售人員為空的單據,那麼我們就可以禁用如下的記錄規則。

選單和記錄規則的禁用,分別在ir_ui_menu.py(_visible_menu_ids)和ir_rule.py(_get_rules)中。

本文來自部落格園,作者:老韓頭的開發日常,轉載請註明原文連結:https://www.cnblogs.com/xushuotec/p/15758177.html