• ODOO权限管理,在两个方面设置权限


    转载参考https://zhuanlan.zhihu.com/p/29130388

    在odoo中新建两个用户user1,user2

    新建用户

    建完了用户,记得编辑用户,设置密码。

    然后以user1用户登录系统,在导航菜单中我们看不到请假菜单,因为我们没有给user1这个用户请假模块的权限。编辑security/ir.model.access.csv

    id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
    access_qingjia_qingjiadan,qingjia.qingjiadan,model_qingjia_qingjiadan,base.group_user,1,1,1,1
    

    id

    权限id,默认规则是access_模块名_类名,还没发现有什么用

    name

    权限名,默认规则是模块名.类名,还没发现有什么用

    model_id:id

    这个是固定写法,规则是model_模块名_类名,其它地方引用权限会用这个id

    group_id:id

    组id,这里的base.group_user是系统内置组,即员工.员工组,创建帐户时,默认属于这个组。所以给这个组赋权限,相当于给新帐户的默认权限。

    perm_read,perm_write,perm_create,perm_unlink

    对应读、写、增加、删除权限,1是有权限,0是无权限,具体根据需要来设置权限

    编辑__manifest__.py

    # -*- coding: utf-8 -*-
    {
        'name': "qingjia",
    
        'summary': """
            请假模块""",
    
        'description': """
            请假模块
        """,
    
        'author': "leo",
        'website': "http://www.yourcompany.com",
    
        # Categories can be used to filter modules in modules listing
        # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
        # for the full list
        'category': 'Uncategorized',
        'version': '0.1',
    
        # any module necessary for this one to work correctly
        'depends': ['base'],
    
        # always loaded
        'data': [
            'security/ir.model.access.csv',
            'views/views.xml',
            'views/templates.xml',
        ],
        # only loaded in demonstration mode
        'demo': [
            'demo/demo.xml',
        ],
        'application': True,    
    }
    

    'data':[]中添加权限文件'security/ir.model.access.csv',

    新增一行'application':True,这样在应用中默认能搜索到请假单模块,因为应用列表默认使用应用过滤器的。

    以管理员身份登录系统,在应用>应用查找qingjia模块。然后升级。

    新增请假单

    使用user1用户登录系统,现在可以看到请假菜单了。新建一个请假单。看起来功能正常。然后我们用user2登录系统。也可以看到这个请假单。如果我们希望用户只能看到自己的请假单,如何做呢,修改代码views/views.xml

    <odoo>
      <data>
        <!-- tree视图 -->
        <record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">
          <field name="name">请假单列表</field>
          <field name="model">qingjia.qingjiadan</field>
          <field name="arch" type="xml">
            <tree>
              <field name="name"/>
              <field name="days"/>
              <field name="startdate"/>
            </tree>
          </field>
        </record>    
    
        <!-- form视图 -->
        <record id="view_form_qingjia_qingjiadan" model="ir.ui.view">
          <field name="name">请假单</field>
          <field name="model">qingjia.qingjiadan</field>
          <field name="arch" type="xml">
            <form>
              <sheet>
                <group name="group_top" string="请假单">
                  <field name="name"/>
                  <field name="days"/>
                  <field name="startdate"/>
                  <field name="reason"/>
                </group>            
              </sheet>
            </form>
          </field>
        </record>
    
        <!-- 视图动作 -->
        <act_window id="action_qingjia_qingjiadan"
                       name="请假单"
                       res_model="qingjia.qingjiadan"
                       view_mode="tree,form" />
    
        <!-- 顶级菜单 -->
        <menuitem name="请假" id="menu_qingjia"/>
    
        <!-- 二级菜单 -->
        <menuitem name="请假单" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>
    
        <!--record 规则 -->
        <record id="rule_user_qingjia_qingjiadan" model="ir.rule">
          <field name="name">自己编辑自己的请假单</field>
          <field name="model_id" ref="model_qingjia_qingjiadan" />
          <field name="domain_force">[('create_uid','=',user.id)]</field>
          <field name="groups" eval="[(4,ref('base.group_user'))]"/>
        </record>
    
      </data>
    </odoo>
    

    增加了一个record 规则,几个关键属性

    model_id

    模块id,对应ir.model.access.csv文件中定义的model_id

    domain_force

    domain表达式,'create_uid'qiangjia_qingjiadan表的字段,在insert数据时,odoo自动写入添加用户的id。user.id是当前用户id。这个domain表达式的含义就是请假单数据的添加用户id等于当前用户id。

    groups

    组id,base.group_user前面说过,是系统内置的员工组的外部id

    再次升级请假模块,现在user1、user2都只能看到自己的请假单,管理员可以看到全部的请假单。odoo管理员默认拥有全部权限。

    总结下odoo权限分级:

    • 第一级是access rule,即表级权限,控制用户组对表的访问权限,一般是用security/ir.model.access.csv文件来管理
    • 第二级是record rule,即行级权限,控制用户组对表中数据行的访问权限,可以写在views/views.xml文件中
    • 其实还有第三级权限,是字段级权限,之后再学习。
  • 相关阅读:
    聆听生活——用心创造
    zedboard通过BRAM实现PS和PL的简单通信
    使用FDATOOL生成xilinx中FIR滤波器IP核的系数
    PCI Express
    波若波罗密多心经
    imp导入时出现imp-00017的问题
    数据库表对比,vim裁剪方法
    [测]jieba分词
    [原]批量修改指定名称的文件名
    [原]通过配合ffmpeg.exe获取视频文件时长
  • 原文地址:https://www.cnblogs.com/zcy1103/p/8143821.html
Copyright © 2020-2023  润新知