當使用Odoo進行權限管理時,數字組成的三元組 (a, b, c) 是一種常見的方式來表示對記錄的權限。這些權限通常應用於Odoo模型(例如資料表),以控制不同用戶或用戶組對這些記錄的操作。以下是更多有關這些權限的詳細資訊:
當a的值為1、2、3、4時,表示用戶或組可以讀取該記錄。
讀取操作允許用戶查看模型中的記錄,但不能進行修改或刪除。
當b的值為2、3、4時,表示用戶或組可以對該記錄進行修改。
寫入操作允許用戶對記錄的字段進行編輯。
當c的值為3、4時,表示用戶或組可以刪除該記錄。
刪除操作允許用戶刪除模型中的記錄。
當a、b、c的值均為0時,表示用戶或組無法執行該操作,即無法讀取、寫入或刪除該記錄。
當a的值為1時,表示用戶或組僅可以讀取記錄,不能進行修改或刪除。
當b的值為5時,表示用戶或組僅可以進行寫入操作,不能讀取或刪除。
當c的值為6時,表示用戶或組僅可以進行刪除操作,不能讀取或寫入。
當a和b的值都為2時,表示用戶或組可以讀取記錄並進行修改。
當a和c的值都為3時,表示用戶或組可以讀取記錄並刪除。
當a、b、c的值都為4時,表示用戶或組可以進行所有操作,包括讀取、寫入和刪除。
這些數字組合可用於定義不同用戶或用戶組對特定模型記錄的訪問權限。通常,在Odoo的模型中,你可以通過設置相應的數字組合來控制對記錄的操作。如果未指定對某一操作的權限限制,則Odoo將根據模型的默認權限進行處理。
這種權限管理方法可以幫助系統管理員和開發人員更好地控制用戶和用戶組對數據的訪問權限,確保數據的安全性和完整性。
除了基本的權限數字組合外,Odoo還提供了其他一些功能和概念,以進一步增強權限管理和數據安全性:
字段級權限(Field-level Access):除了對整個記錄的權限控制外,Odoo還允許你對模型的具體字段進行權限設置。這意味著你可以控制用戶或用戶組是否可以訪問和修改特定字段的數據。這對於保護敏感信息非常有用。
級聯刪除(Cascade Delete):Odoo允許你配置級聯刪除,這意味著如果一個用戶有刪除權限,他們可以刪除與該記錄相關聯的其他記錄,這有助於維護數據的完整性。
預設權限(Default Access Rights):你可以設置模型的預設權限,以確保新創建的記錄始終具有預期的權限。這是防止數據意外外洩或訪問的重要方式。
權限繼承(Inheritance of Access Rights):權限可以被繼承。這意味著,如果一個用戶或用戶組有對一個模型的某些記錄的權限,他們通常也會具有對該模型的其他記錄的相同權限,除非另有指定。
伙伴(Partners):Odoo中的伙伴是與用戶相關的實體,如客戶、供應商、員工等。你可以為不同的伙伴類型配置不同的權限,以限制他們對數據的訪問。
權限組(Access Groups):你可以將用戶分組到不同的權限組中,並為每個組分配不同的權限。這使得管理多個用戶的權限變得更容易。
記錄所有變更(Audit Trail):Odoo提供了記錄系統,可以記錄用戶對記錄的所有變更,包括創建、修改和刪除操作。這有助於追蹤數據的歷史和溯源。
總之,Odoo提供了豐富的權限管理功能,可以根據不同的業務需求和安全性要求來配置。通過適當的權限管理,你可以確保數據的機密性和完整性,同時允許用戶進行必要的操作。
經過這幾天對權限的學習我們來看一些範例吧
範例:假設我們想限制model字段的訪問:
is_public = fields.Boolean(group="my_library.group_library_user")
private_notes = fields.Text(group="my_library.group_library_librarian")
ir.rule
當我們想要限制record的訪問,我們會創建Security/library_security.xml
,比如說user可以看自己的書
,librarian可以看到所有的書
<odoo noupdate='1'>
<record id="library_book_user_rule" model="ir.rule">
<field name="name">Library: See only own books</field>
<field name="model_id" ref="model_library_book"/>
<field name="groups" eval="[(4,ref('my_library.group_library_user'))]"/>
<field name="domain_force" />[('is_public','=',True)]</field>
</record>
<record id="library_book_all_rule" model="ir.rule">
<field name="name">Library: See all books</field>
<field name="model_id" ref="model_library_book"/>
<field name="groups" eval="[(4,ref('my_library.group_library_librarian'))]"/>
<field name="domain_force" />[(1,'=',1)]</field>
</record>
</odoo>
當我們在畫面中,不是user權限內可以使用的功能時,我們可以使用sudo()與ensure_one():
def report_missing_book(self):
self.ensure_one()
message = "Book is missing (Reported by: %s)" %
self.env.user.name
self.sudo().write({
'report_missing': message
})
※如果我們想要隱藏menu或是header的話,我們也可以使用groups:
<menuitem id='library_book_category_menu' name='book category'
parent='library_book_category_form'
groups='my_library.group_library_librarian'/>
.
<form>
<header groups="my_library.group_library_user".....>
.
.
</header>
.
.
.
</form>
.