• 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"/>
    
  • 相关阅读:
    Python自定义web框架、Jinja2
    Django初探(模板渲染、模板语音、simple_tag、母版子版、静态配置文件)
    多线程 threading
    python操作mysql
    sql 汉字转首字母拼音
    添加sql server约束
    NFS,Memcached,Tokyo tyrant实现session共享性能测试
    让Editplus自动格式化js、css、html。。。
    sql server中利用sql语句如何创建角色和用户
    asp网站文件夹权限设置
  • 原文地址:https://www.cnblogs.com/dengz/p/14582182.html
Copyright © 2020-2023  润新知