美文网首页odoo
odoo10 学习笔记3(权限管理)

odoo10 学习笔记3(权限管理)

作者: luohuayong | 来源:发表于2017-01-09 10:56 被阅读5694次

在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

<openerp>
  <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>
</openerp>

增加了一个record 规则,几个关键属性
model_id
模块id,对应ir.model.access.csv文件中定义的model_id
domain_forc
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文件中
  • 其实还有第三级权限,是字段级权限,之后再学习。

相关文章

  • odoo10 学习笔记3(权限管理)

    在odoo中新建两个用户user1,user2 建完了用户,记得编辑用户,设置密码。然后以user1用户登录系统,...

  • 用户管理

    个人学习笔记-1.用户及组管理 用户、组和权限管理 每个使用者: 用户标识、密码: 认证(Authenticati...

  • 23-MYSQL数据库(二)

    视图 函数 自定义函数 流程控制 触发器 MySQL用户和权限管理 用户管理 小笔记 MySQL权限管理 授权 小...

  • 25.Mongodb的权限管理

    Mongodb的权限管理 学习目标 1.了解 mongodb的权限管理 1. 为什么要进行权限管理的设置 刚安装完...

  • Oracle | 用户、权限、角色管理操作

    一、用户管理 1、创建用户 2、修改用户 3、删除用户 二、权限管理 1、系统权限 - 授权操作 2、对象权限 -...

  • 钉钉了解

    管理员角色 一、管理权限 权限分组有2层:管理范围,权限内容。 管理范围有3个:全组织/所在部门及下级部门/特定部...

  • linux基础学习(3)-权限管理

    权限管理的重要性 linux是多用户多任务分时系统,不是单单创建多个用户、多个群组就可以了。还需要对一个文件的所有...

  • 2020-12-10服务器管理

    1.用户管理 2.权限管理 3.磁盘管理 4.进程管理

  • pigx-ui 添加页面后报404错误

    1、在pigx-ui代码里添加页面 2、在界面的【权限管理】 - 》【菜单管理】添加菜单 3、在界面的【权限管理】...

  • 任务11:利用漏洞提权(二)

    注:本笔记来自安全牛课堂,感谢倪群主,感谢苑老师! 这个漏洞,只要有管理员权限,那么exp后,就有了域管理员权限!...

网友评论

  • bc56f9ac39f7:views中的权限设置中 :<field name="groups" eval="[(4,ref('base.group_user'))]"/>
    groups这一行有什么作用呢,我测试好像没有这一行效果也一样。
    我刚接触这个,希望向前辈请教,可以加QQ 276288108
    object_li:楼主有审批流的文章吗
    luohuayong:groups这一行表明,这个rule对那个组的用户生效。如果没有这一行表示这个rule对所有组生效。因为所有用户在默认都属于base.group_user组,所以你发现没有这样行效果也一样。总结下就是,如果rule要多所有用户生效,可以指定groups为base.group_user,或者不要groups。如果对特定组生效,需要明确写明groups。
  • lovedrose:hello!
    我也在学习odoo,可以请教您吗?
    luohuayong:我也刚学习,有问题一起讨论

本文标题:odoo10 学习笔记3(权限管理)

本文链接:https://www.haomeiwen.com/subject/gsimvttx.html