openerp/odoo 权限解析

前言:odoo权限管理主要分为4类
1.菜单权限:即未指定的用户组看不到该菜单。缺点:不安全,只是隐藏菜单,若用户知道菜单的id一样可以通过url查看菜单。
2.对象级别:即有权限的对象才能有某种功能比如:增删改查的权限
3.记录级别权限:即对数据的访问权限
4.字段级别权限:即一个对象或者某个字段的访问权限
例:以请假单为例:只要管理员才能看到所有人的请假单,而自己只能看到自己的请假单
leave_security.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1"> 
        <record model="ir.module.category" id="module_category_leave">
            <field name="name">请假单</field>
        </record>
        <record model="res.groups" id="group_leave_user">
            <field name="name">User</field>
            <field name="category_id" ref="module_category_leave"/>
        </record>
        <record model="res.groups" id="group_leave_manager">
            <field name="name">Manager</field>
            <field name="implied_ids" eval="[(4, ref('group_leave_user'))]"/>
            <field name="category_id" ref="module_category_leave"/>
        </record>

        <record id="rule_user_leave" model="ir.rule">
            <field name="name">User只能看自己的请假单</field>
            <field name="model_id" ref="model_leave_leave"/>
            <field name="domain_force">[('create_uid','=',user.id)]</field>
            <field name="groups" eval="[(4,ref('group_leave_user'))]"/>
        </record>

        <record id="rule_manager_leave" model="ir.rule">
            <field name="name">Manage可看所有请假单</field>
            <field name="model_id" ref="model_leave_leave"/>
            <field name="domain_force">[(1,'=',1)]</field>
            <field name="groups" eval="[(4,ref('group_leave_manager'))]"/>
        </record>

    </data>
</openerp>
            
ir.model.access.csv
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_leave_leave_191012_001,leave.leave,model_leave_leave,group_leave_user,1,1,1,0
access_leave_leave_191012_002,leave.leave,model_leave_leave,group_leave_manager,1,1,1,1
解析:
  • id:命名规则:access_模型类名,如果权限很多的话,后面可以跟着日期时间后缀
  • name:模型类名
  • model_id:model_模型类名
  • group_id:group_开头,定义的权限名,与leave_security.xml中相互对应
  • perm_read,perm_write,perm_create,perm_unlink:分别对应读、写、创建、删除权限
以销售订单为例设置权限:只有超级管理员才能看全部销售订单数据,而普通用户只能看已完成的订单数据
menu.xml
<menuitem id='menu_nt_sale_order' name='订单' parent="menu_nt_order" sequence="10" new_ui="1"/>
				<menuitem id='menu_nt_sale_order_waiting_list' name='销售订单(待处理)' parent="menu_nt_sale_order" sequence="10" action="nt_sale_order_tree_action_waiting" new_ui="1" />
				<menuitem id='menu_nt_sale_order_all_list' name='销售订单(全部)' parent="menu_nt_sale_order" sequence="20" action="nt_sale_order_tree_action_all" new_ui="1" />
			
通过id设置权限列表 role_init.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="0">
        <!--  角色  -->
        <record id="nt_user_role_super_user" model="res.users">
            <field name="name">超级管理员(初始化)</field>
            <field name="login">super_user</field>
            <field name="password">super_user</field>
            <field name="is_init" eval="True" />
            <field name="is_role" eval="True"/>
            <field name="active" eval="False"/>
            <field name="groups_id" eval="[此可放用户组权限]"]" />
            <field name="display_menu_ids" eval="[
                (4,ref('nt_core.menu_nt_sale_order_waiting_list')),
                (4,ref('nt_core.menu_nt_sale_order_all_list'))]"
                      
            
            <record id="nt_user_role_store_master" model="res.users">
            <field name="name">店员(初始化)</field>
            <field name="login">store_master</field>
            <field name="password">store_master</field>
            <field name="is_init" eval="True" />
            <field name="is_role" eval="True"/>
            <field name="is_shop_manager" eval="True"/>
            <field name="active" eval="False"/>
            <field name="display_menu_ids" eval="[            
                (3,ref('nt_core.menu_nt_sale_order_waiting_list')),
                (4,ref('nt_core.menu_nt_sale_order_all_list')),]"
             
           
解析:

many2many情况:

  • (0,0,{values}) 根据values里面的信息新建一个记录。

  • (1,ID,{values})更新id=ID的记录(写入values里面的数据)

  • (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

  • (3,ID) 切断主从数据的链接关系但是不删除这个数据

  • (4,ID) 为id=ID的数据添加主从链接关系。

  • (5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)

  • (6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))

one2many:

  • (0, 0,{ values })根据values里面的信息新建一个记录。

  • (1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)

  • (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值