Odoo 权限简介

odoo权限

一.了解odoo权限体系

# Odoo访问权限通过   '安全组' 进行配置-----> 给组分配权限 ----->为用户分配组

# 针对 已有模型 ,可以沿用存在的权限组
# 针对  新建模型, 必须要重新设置权限组和访问规则


#  通俗:
		odoo   权限分为: 权限组 和 访问记录  和 ACL
        权限组至少包含:用户和管理员权限
       

二. 权限组

<record id="group_library_librarian" model="res.groups">
    <field name="name">Librarians</field>
    <field name="category_id"
           ref="base.module_category_library"/>
    <field name="implied_ids" eval="[(4,
                                    ref('group_library_user'))]"/>
    <field name="users" eval="[(4, ref('base.user_admin'))]"/>
</record>



###  
	name:组的显示名称
	category_id  这是对应分类的引用,用于用户表单中组织分组
	implied_ids  继承权限的其他组
	users :  属于该组的用户

####
        菜单(menu_access字段):指定组所能访问的菜单项
        视图(view_access字段):指定组所能访问的UI界面视图
        访问权限(model_access字段):指定组所能访问的模型,在为模型添加访问权限一节中会进行详述
        访问规则(rule_groups字段):指定一些应用于组的记录级访问规则,在限制模型中字段的访问一节中会进行详述
        提示(comment记录):这是组的描述或注释文本

三.权限访问控制规则 ACL

CSV文件中的字段如下:

		id:这是针对这一规则的XML ID内部标识符。该模块中的任何唯一名称都可以,但按惯例使用access_<model>_<group>。
		name:这是访问规则的标题。常用实践是使用access.<model>.<group>这一名称。
		model_id:id:这是该模型的XML ID。Odoo使用model_<name>格式对这些模型自动分配这种类型的ID,使用带下划线而非点号的模型名称。如果模弄是在另一个模块中创建的,则需要完整的包含模块名称的有效完整XML ID。
		group_id:id:这是针对用户组的XML ID。如果留空,它应用于所有用户。base模块中提供了一些基本用户级,比如针对所有用户的base.group_user和针对管理员用户的base.group_system。其它应用可以添加它们自己的用户组。
		perm_read:前述组中成员可以读取模型记录。它接收两个值:0或1。使用0来限制模型上的读权限,1来提供读权限。
		perm_write:前述组中成员可以更新模型记录。它接收两个值:0或1。使用0来限制模型上的写权限,1来提供写权限。
        perm_create:前述组中成员可以在该模型中新增记录。它接收两个值:0或1。使用0来限制模型上的创建权限,1来提供创建的权限。
        perm_unlink:前述组中成员可以在该模型中删除记录。它接收两个值:0或1。使用0来限制模型上的删除权限,1来提供删除的权限。

四.限制模型中字段的访问

is_public =fields.Boolean(groups='my_library.group_library_librarian')
private_notes =fields.Text(groups='my_library.group_library_librarian')


#  如果使用没有系统配置权限的用户登录的话,图书表单中就不会显示该字段


# groups 属性的字段进行了特殊处理。 检查用户是否属于属性中指定的用户组。  
		不属于指定的用户组,Odoo在用户界面删除该字段,限制对该字段的ORM操作
    
# 注意 
		1. 不仅仅是隐藏,ORM也无法操作。 XML-RPC和JSON-RPC调用不到
    	2. @api.onchange方法调用到该 字段则会抛出访问异常

五.使用记录规则限制记录的访问

<record model="ir.rule" id="library_book_all_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>


#### 
        名称(name):针对规则的描述性标题。
        对象(model_id):对规则所应用模型的引用。
        组(groups):规则所应用的安全组。如未指定安全组,规则应视作全局并使用不同的方式进行应用(继续阅读本节来学习有关组的更多知识)。
        域(domain):域表达式用于过滤记录。该记录将仅用于对这些过滤的记录进行应用。

六.用户视图展示权限

# 1. 重写 res.config.settings配置模型,添加新字段
    group_release_dates = fields.Boolean(
            "Manage book release dates",
            group='base.group_user',
            implied_group='my_library.group_release_dates',   # 依赖的权限组
        )
        module_note = fields.Boolean("Install Notes app")
         
# 2. 视图继承,并添加新的字段
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <record id="view_general_config_library" model="ir.ui.view">
        <field name="name">Configuration: add Library options</field>
        <field name="model">res.config.settings</field>
        <field name="inherit_id"
               ref="base_setup.res_config_settings_view_form"/>
        <field name="arch" type="xml">
            <div id="business_documents" position="before">
                <h2>Library</h2>
                <div class="row mt16 o_settings_container">
                    <!-- Release Dates option -->
                    <div class="col-12 col-lg-6 o_setting_box">
                        <div class="o_setting_left_pane">
                            <field name="group_release_dates" class="oe_inline"/>
                        </div>
                        <div class="o_setting_right_pane">
                            <label for="group_release_dates"/>
                            <div class="text-muted">
                                Enable relase date feature on books
                            </div>
                        </div>
                    </div>
                    <!-- Release Dates option -->
                    <div class="col-12 col-lg-6 o_setting_box">
                        <div class="o_setting_left_pane">
                            <field name="module_note" class="oe_inline"/>
                        </div>
                        <div class="o_setting_right_pane">
                            <label for="module_note"/>
                            <div class="text-muted">
                                Install note module
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </field>
    </record>
</odoo>

七.以超级用户访问记录集

sudo()  # 超级用户 忽略所有访问规则

八.组来隐藏元素和菜单

# 1.  隐藏 form表单 header,有这个权限组的人才能看到
        <header groups="my_library.group_library_user">

# 2.  menuitem  同理
        <menuitem name="Book Categories"
        id="library_book_category_menu"
        parent="library_base_menu"
        action="library_book_category_action"
        groups="my_library.group_library_librarian"/>
posted @ 2021-03-26 14:29  染指未来  阅读(416)  评论(0编辑  收藏  举报