分享

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

 石旭明文摘 2019-11-21

在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_unlinkaccess_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.',    # 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文件中
  • 其实还有第三级权限,是字段级权限,之后再学习。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多