odoo 权限问题

odoo 权限问题

权限组问题

权限组是为了将人员按组划分同一分配权限。权限组的建立是基于每个应用来实现的

  1. 建立一个应用的分组(可省略,主要用于创建用户时有选择项)

建立一条record记录model是ir.module.category,例如在my_task(一个应用)myaddons/my_task/security/permission.xml中编写下面内容:

<record id="module_category_my_task" model="ir.module.category">
            <field name="name">我的任务</field>
            <field name="description">我的任务app</field>
            <field name="sequence">1</field>
</record>

image.png

  1. 创建2个分组.
<odoo>
    <data>
        <record id="module_category_my_task" model="ir.module.category">
            <field name="name">我的任务</field>
            <field name="description">我的任务app</field>
            <field name="sequence">1</field>
        </record>
        <!--创建应用权限分组-->
        <record id="my_task_manage" model="res.groups">
            <field name="name">管理员</field>
            <!--category_id关联的应用权限分类-->
            <field name="category_id" ref="module_category_my_task"/>
            <!--默认加入权限组的用户,base.user_root指系统管理员用户-->
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
        </record>
      <!--员工组-->
        <record id="my_task_employee" model="res.groups">
            <field name="name">员工</field>
            <!--category_id关联的应用权限分类-->
            <field name="category_id" ref="module_category_my_task"/>
        </record>
    </data>
</odoo>
  1. 给分组添加权限

添加权限通常在security下的ir.model.access.csv
image.png

  1. 继承权限
<!--员工组-->
        <record id="my_task_employee" model="res.groups">
            <field name="name">员工</field>
            <!--category_id关联的应用权限分类-->
            <field name="category_id" ref="module_category_my_task"/>
            <!--继承基础员工组,添加的员工会自动添加到基础员工中去-->
            <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
        </record>
  1. 增加预设用户
<field name="users" eval="[(4, ref('base.user_root'))]"/>

name 组的描述名称
category_id 指定此组属于哪个应用程序(模块)
users 指定了组里面的用户,这里表示把admin用户添加到该组
eval 解析
(4,ID)添加主从链接关系到id=ID的对象。
(3,ID)去除和id=ID的对象主从链接关系,但是不删除这个对象
(2,ID) 去除和id=ID的对象主从链接关系,并且删除这个对象(调用unlink方法)
(5) 去除所有的链接关系,也就是循环所有的从数据且调用(3,ID)
(6,0,[IDs]) 用IDs里面的记录替换原来链接的记录,即先执行(5)再循环IDs执行(4,ID)

记录权限(record_rule)

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="0">
        <!-- Sequences for sale.order -->
        <record id="wf_sale.sale_order_rule" model="ir.rule">
            <field name="name">销售员工访问</field>
            <!--model_id  ref,many2one到模型的id,model_表名-->
            <field name="model_id" ref="model_wf_sale_sale_order"/>
            <!--domain_force过滤条件,订单销售人id是当前登录用户的id,或者没销售的订单-->
            <field name="domain_force">['|',('sale_people','=',user.id),('sale_people','=',False)]</field>
            <!--指定是哪个组-->
            <field name="groups" eval="[(4,ref('wf_sale.wf_sale_employee'))]"/>
        </record>
        <record id="wf_sale.sale_order_manage_rule" model="ir.rule">
            <field name="name">销售经理访问</field>
            <field name="model_id" ref="model_wf_sale_sale_order"/>
            <field name="domain_force">[(1,'=',1)]</field>
            <field name="groups" eval="[(4,ref('wf_sale.wf_sale_manage'))]"/>
        </record>
    </data>
</odoo>

参数介绍

  • name:记录规则名称,可随意定义
  • model_id:添加记录规则得model,写法:模块名.model_表名(表名有.需要换成_),内部使用可以加模块名
  • domain_force:记录过滤条件
  • groups:绑定权限生效的组

按钮权限

<button string="回退报价单" 
        type='object' 
        class='oe_highlight' 
        name="action_roll_back"
				groups="wf_sale.wf_sale_manage"
        attrs = "{'invisible':[('state','=','draft')]}"
/>
<button
        string="生成销售单"
        type="object"
        class='oe_highlight'
        name="action_commit_order"
        groups="wf_sale.wf_sale_manage"
        attrs = "{'invisible':[('state','=','approved')]}"
/>
<button string="确定完成"
        type="object"
        class='oe_highlight'
        name='action_commit_done'
				groups="wf_sale.wf_sale_manage"
        attrs = "{'invisible':[('state','=','done')]}"
/>

通过groups指定权限组id(需要加上模块名)来绑定拥有权限的组,这样只有有权限的人才能看到按钮,并且通过销售的状态来决定是否显示按钮

posted @ 2019-04-28 14:59  Kingfan  阅读(1010)  评论(1编辑  收藏  举报