odoo中怎么为菜单配置权限组

发布时间 2023-10-16 15:07:25作者: *感悟人生*
 

 上面的需求是:为  ”设计识图“  这个菜单添加权限: 只有在设置 > 用户和公司 > 用户组中,会有一个名为“辅助组-设计识图”打钩后,才会显示这个菜单项:

 实现上面的需求共三步:

 

 

  1、在本模块的security目录下的\security\ir.model.access.csv 下为模型添加权限(如果有子表的话,也要添加权限):

    id_ss_design_literacy_group_design,name_ss_design_literacy_group_design,ss_picture.model_ss_design_literacy,group_design,1,1,1,1
    id_ss_design_literacy_result_group_design,name_ss_design_literacy_result_group_design,ss_picture.model_ss_design_literacy_result,group_design,1,1,1,1
        
    
      ss_design_literacy
模型名
    group_design :组名   ss_picture:模块名
 2、在本模块的security目录下的\security\ir.model.access.xml 下定义组与安全规则

                                              

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

    <!--定义一个新的用户组    -->
    <record id="group_design" model="res.groups">  <!--这里的‘group_design’  就是第一步中的组名,这个一定要一致,否则会报错。-->
    <field name="name">辅助组-设计识图</field>
    <field name="category_id" ref="base.module_category_ss_picture"/>
    </record>
    <!--  为模型定义安全规则  -->
    <record id="rule_designer_only" model="ir.rule">
    <field name="name">只有设计师可以访问</field>
    <field name="model_id" ref="model_ss_design_literacy"/>
    <field name="groups" eval="[(4, ref('ss_picture.group_design'))]"/>
    <field name="domain_force">[(1, '=', 1)]</field>
    <field name="perm_read" eval="1"/>
    <field name="perm_write" eval="1"/>
    <field name="perm_create" eval="1"/>
    <field name="perm_unlink" eval="1"/>
    </record>



</data>
</odoo>

以下是对上面代码的详细解释:

<!-- 定义一个新的用户组 -->
<record id="group_design" model="res.groups"> <!-- 在res.groups模型中创建一个新的记录,其ID为group_design,这个ID是唯一的标识符,确保它在模块中是唯一的,避免重复。 -->
    <field name="name">辅助组-设计识图</field> <!-- 用户组的显示名称为“辅助组-设计识图”。 -->
    <field name="category_id" ref="base.module_category_ss_picture"/> <!-- 关联到“base.module_category_ss_picture”这个权限分类。这意味着该用户组将在该分类下显示。 -->
</record>

<!-- 为模型定义安全规则 -->
<record id="rule_designer_only" model="ir.rule"> <!-- 在ir.rule模型中创建一个新的记录,其ID为rule_designer_only,这个ID是唯一的标识符,确保它在模块中是唯一的,避免重复。 -->
    <field name="name">只有设计师可以访问</field> <!-- 该安全规则的显示名称为“只有设计师可以访问”。 -->
    <field name="model_id" ref="model_ss_design_literacy"/> <!-- 这个规则适用于“model_ss_design_literacy”模型。确保你的模型名称是正确的并且已经被定义。 -->
    <field name="groups" eval="[(4, ref('ss_picture.group_design'))]"/> <!-- 该规则只适用于“ss_picture.group_design”用户组。这意味着只有该用户组的成员受此规则约束。4代表添加操作,将指定的组添加到此规则中。 -->
    <field name="domain_force">[(1, '=', 1)]</field> <!-- 定义了该规则的适用域。这里的域表示对所有记录都适用,因为1=1始终为真。 -->
    <field name="perm_read" eval="1"/> <!-- 允许用户组成员读取记录。 -->
    <field name="perm_write" eval="1"/> <!-- 允许用户组成员修改记录。 -->
    <field name="perm_create" eval="1"/> <!-- 允许用户组成员创建新记录。 -->
    <field name="perm_unlink" eval="1"/> <!-- 允许用户组成员删除记录。 -->
</record>

 

 


3、在本模块的\views\目录下的xml文件中,添加以下代码
  
      <menuitem id="menu_design_literacy" name="设计识图" parent="ss_picture.ss_picture_menu"
          action="ss_design_literacy_action" groups="ss_picture.group_design"/>

 

完成综上步骤后,升级所在模块后,就可以看到最上面图中所显示的菜单了。本页面中的两个按钮。我用了css进行了美化和位移。