1. 程式人生 > >Odoo權限控制詳解

Odoo權限控制詳解

部分 sla 工作流 記錄 dom idt 用戶 pan 系統管理

轉載請註明原文地址:https://www.cnblogs.com/ygj0930/p/10826105.html

一:Odoo中的權限設置主要有以下5種

1)菜單、報表的訪問權限

Odoo可以設置菜單項、某些報表的可見性,通過在xml文件中,對應的menu標簽、report標簽的groups屬性來定義

2)模型的訪問權限設置

Odoo可以設置模型對象的增刪讀改權限,這個在下面會詳解。

3)記錄的訪問權限設置

模型的權限是針對改模型的所有記錄的,而記錄的訪問權限則更加細致,針對每一條記錄進行過濾篩選。在下文中詳解。

4)字段的訪問權限設置

Odoo可以設置具體字段的訪問權限,包括可見性、寫、改權限等。

有兩種方式:一種是在模型定義的代碼中,通過某字段的read=[群組]、write=[群組]屬性,指定字段對於哪些群組可讀寫。

另一種是在模型的視圖xml文件中,對字段通過 groups屬性指定訪問權限。

5)工作流操作權限

工作流中的活動可以設置操作權限,規定只有哪些群組的用戶才可以操作。

1~4,都是通過群組來設置的,把用戶添加至group,然後在代碼中通過group以群組為單元進行權限設置。也可以在Odoo的開發者模式下,點擊“群組”菜單,在可視化界面中進行設置:

技術分享圖片

5是通過角色來設置的,通過為用戶賦予角色,為角色賦予權限,也就為用戶賦予了權限。

二:Odoo中對數據的權限控制機制

Odoo對數據的訪問權限管理有兩種機制:模型訪問權限管理(access rule)、記錄規則管理(record rule),記錄規則管理是對模型訪問權限管理的細化。

三:訪問權限組定義

在模塊的security目錄下,新建groups.xml文件,在其中定義權限組。

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="0">

        <record id="權限組id" model="ir.module.category">
            <field name="name">XXX權限組</field>
            <field name="description">XXX模塊權限設置</field>
        </record>

    </data>
</odoo>

該文件是data文件,需要在manifest.xml中配置。在創建數據庫後就會執行解析,往ir.module.category模型插入相應的記錄,從而創建出對應的權限組。

四:模型訪問控制

模型權限訪問管理:模型級的權限控制,該模型的所有記錄,對於群組內用戶(如無定義,則對所有用戶)的讀寫改刪權限控制。

access rule是通過security文件夾下的ir.model.access.csv文件來控制的:

這個文件第一行指明了需要控制的內容:

id,name,model_id,group_id,perm_read,perm_write,perm_create,perm_unlink

分別對應:

 id:記錄的外部標識符 (也稱為 XML ID)。在我們的模塊中它應該是唯一。
 name:描述標題。官方模塊通常使用模型名稱和組的圓點分隔的字符串。如: todo.task.user
 model_id :模型的外部標識符。todo.task對應該標識符是model_todo_task
 group_id:權限組,在第一步中通過groups.xml。最重要的一點是供定義它的模塊名前綴。比如員工組,它的標識符為base.group_user。 
 perm_XX:字段標記授予 讀, 寫, 創建,刪除 權限。

之後下面各行一一對應第一行定義的內容去書寫權限控制,如:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_product_product_account_user,product.product.account.user,product.model_product_product,group_account_user,1,0,0,0
access_product_product_account_manager,product.product.account.manager,product.model_product_product,group_account_manager,1,1,1,1
access_product_template_account_manager,product.template.account.manager,product.model_product_template,group_account_manager,1,1,1,1

最後,我們把模塊的權限控制文件添加到manifest文件的data中加載:

‘data‘:[‘security/ir.model.access.csv‘,]

五:記錄訪問控制

記錄控制:記錄級別的權限控制,可以為某模型的記錄定義權限條件,對於某群組中(如無指定,則所有用戶)符合過濾條件的用戶,賦予模型記錄的讀寫改刪權限。

基於記錄的權限可以控制指定模型的實例對象(數據紀錄)的訪問權限。

記錄規則的定義模型是ir.rule。

記錄規則控制,我們需要提供一個獨特的名稱,還需要操作符和規則過濾器組成的模型以達到訪問限制,在Odoo中,規則過濾器通常是多個元組組成的列表。

規則適用於某些特定的訪問組。如果它沒有訪問組,這種特殊情況,被認為是全局 ( global字段將自動設置為 True)。全局規則是不同的,因為他們實施了限制,不會被非全局規則重寫

1:首先,我們在security目錄下新建 模塊名_security.xml 文件。

2:然後,在其中添加以下內容:


<?xml version="1.0" encoding="utf-8"?>
<odoo>    
        <record id="模塊名_對象_rule" model="ir.rule"> //為某對象添加記錄規則
            <field name="name">規則名</field>
            <field name="model_id" ref="model_模塊名"/>
            <field name="domain_force">[(‘字段名‘,‘操作符‘,值)]</field> //記錄過濾表達式:符合該表達式的記錄才能被訪問
            <field name="groups" eval="[(值,ref(‘訪問組id‘))]"/> //訪問組id在第一步創建時指定,用於指定本規則作用於哪些組
            <field name="perm_read" eval="0/1"/>
            <field name="perm_write" eval="0/1"/>
            <field name="perm_create" eval="0/1"/>
            <field name="perm_unlink" eval="0/1" />
</record> </odoo>

3:最後,在manifest中添加該文件到data屬性下生效。

六:Odoo中預設的權限組有哪些

在Odoo的“用戶”菜單中,可以在“訪問權”選項卡處,為用戶設定系統預設的角色、群組,主要預設的群組以及其權限有:

Employee:base模塊中定義的權限組,擁有業務夥伴、產品、財務、倉庫等一些基本對象的讀權限,用戶一般應該屬於該組,否則幾乎不能查看和使用系統的任何功能。
Administrator /Access Rights:base模塊定義的權限組,該組擁有創建用戶、創建權限組、設置安全規則等權限。具體來說,該組擁有菜單Administration/Users 和 Administration/Security的訪問權限。

Administrator / Configuration:base 模塊定義的權限組,該組擁有系統管理功能,具體來說,該組擁 有菜單Administration/Customization、Administration/Translations、Administration/Modules Management 的訪問權限

Useability / No One:base模塊定義的權限組,該組相當於一個空組。默認情況下,該組沒有任何菜單和對象的訪問權限,也沒有任何 user 屬於該組。系統默認是,如果沒有定義任何組訪問該菜單,則任何組都允許訪問該菜單。也許某些菜單,希望默認任何組都不允許訪問該菜單。這種情況,就可以聲明 No One 組允許訪問該菜單,那麽,除非顯示聲明,否則其他組都不允許訪問該菜單了。

Useability / Extended View:系統的某些擴展功能,如果要使用擴展功能,就必須屬於該組。一 般用戶都不必要該組。
Partner Manager:該組擁有業務夥伴配置和業務夥伴新建功能。默認情況下,只要是 Employee,就能查看業務夥伴信息,但只有 Partner Manager 才能配置、修改、新建、刪除業務夥伴信息

Product / Manager:product模塊定義的權限組,該組擁有產品配置功能,也就是菜單 Products/Configuration 的訪問權限。默認情況下,只要是 Employee,就能查看產品信息,但只有 Product / Manager 才能配置和修改產品信息

Finance / Accountant:相當於普通會計師,可以進行日常的會計處理工作
Finance / Invoice:擁有業務夥伴發票的處理權限,相當於負責收付錢和開票的出納。也就是對菜單 Financial Management/Invoices 的訪問權限。
Finance / Manager:相當於財務管理員,可以配置財務模塊,以及查看財務報表
Sale / Manager:允許配置銷售模塊,也就是允許訪問菜單 Sales Management/Configuration。
Sale / Salesman:允許進行大部分的銷售日常工作,相當於銷售部業務員。

Odoo權限控制詳解