- 1 <?xml version="1.0" encoding="utf-8"?>
- 2 <odoo>
- 3 <record id="category_custom_logistic" model="ir.module.category">
- 4 <field name="name">物流管理</field> <!--用户组分类名称-->
- 5 <field name="sequence">1</field> <!--组分类显示顺序、优先级-->
- 6 </record>
- 7 <record id="groups_logistic_manager" model="res.groups">
- 8 <field name="name">管理员</field>
- 9 <field name="category_id" ref="category_custom_logistic"/>
- 10 </record>
- 11 <record id="groups_logistic_user" model="res.groups">
- 12 <field name="name">员工</field>
- 13 <field name="category_id" ref="category_custom_logistic"/>
- 14 </record>
- 15 </odoo>
用户名和密码我们一般是通过odoo管理系统进行创建,因为我们不能提前确定好到底用什么用户名和密码,只有在实施的时候才能确定。管理系统如何创建用户,如何添加到用户组,操作简单,就不做介绍了。这里我们介绍下odoo系统中base.user_root和 base.user_admin这两个特殊用户的的别:
菜单权限可以通过odoo管理系统进行添加,也可以通过配置文件进行初始化,通常我们会选择后者。目前最常用的方式就是在菜单定义的地方添加用户组即可实现,比如我们为档案管理菜单添加上面定义的两个用户组:
出现这种情况的原因是因为管理员账号本身受用户组权限的影响,我们把档案管理的菜单权限只分配给了以上定义的两个用户组,管理员账号不在当前的两个用户组中,所以就无法访问了。如果我们想要管理员拥有档案管理菜单的访问权限,我们可以在定义用户组的时候,初始管理员账号,代码如下:
- 1 <?xml version="1.0" encoding="utf-8"?>
- 2 <odoo>
- 3 <record id="category_custom_logistic" model="ir.module.category">
- 4 <field name="name">物流管理</field> <!--用户组分类名称-->
- 5 <field name="sequence">1</field> <!--组分类显示顺序、优先级-->
- 6 </record>
- 7 <record id="groups_logistic_manager" model="res.groups">
- 8 <field name="name">管理员</field>
- 9 <field name="category_id" ref="category_custom_logistic"/>
- 10 <field name="users" eval="[(4, ref('base.user_admin'))]"/><!--为用户组添加管理员用户 -->
- 11 </record>
- 12 <record id="groups_logistic_user" model="res.groups">
- 13 <field name="name">员工</field>
- 14 <field name="category_id" ref="category_custom_logistic"/>
- 15 <field name="users" eval="[(4, ref('base.user_admin'))]"/><!--为用户组添加管理员用户 -->
- 16 </record>
- 17 </odoo>
- 1 <!--代码路径:odoo\addons\web\views\lazy_assets.xml-->
- 2 <?xml version="1.0" encoding="utf-8"?>
- 3 <odoo>
- 4 <!--表示为内部用户添加assets_backend_legacy_lazy视图的访问权限-->
- 5 <template id="assets_backend_legacy_lazy" name="Lazy assets for legacy Views" groups="base.group_user">
- 6 <t t-call-assets="web.assets_backend_legacy_lazy" />
- 7 </template>
- 8 </odoo>
就是通过为视图指定所属的组来实现的,与菜单的配置方式相似。这里为内部用户添加了assets_backend_legacy_lazy视图的访问权限,可以在截图中看到效果。
可以在odoo管理系统中添加,也可以通过配置文件在模块安装的时候初始化,这里我们介绍通过配置文件添加的方式。在模块的security目录中创建ir.model.access.csv文件,配置内容主要是以下选项:
- 1 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
- 2 access_waybill_manager,access.waybill.manager,model_waybill,groups_logistic_manager,1,1,1,1
- 3 access_waybill_user,access.waybill.user,model_waybill,groups_logistic_user,1,1,1,1
- 4 access_waybill_detail_manager,access.waybill.detail.manager,model_waybill_detail,groups_logistic_manager,1,1,1,1
- 5 access_waybill_detail_user,access.waybill.detail.user,model_waybill_detail,groups_logistic_user,1,1,1,1
- 6 access_goods_manager,access.goods.manager,model_goods,groups_logistic_manager,1,1,1,1
- 7 access_goods_user,access.goods.user,model_goods,groups_logistic_user,1,1,1,0
- 8 access_package_manager,access.package.manager,model_package,groups_logistic_manager,1,1,1,1
- 9 access_package_user,access.package.user,model_package,groups_logistic_user,1,1,1,0
- 10 access_shipper_manager,access.shipper.manager,model_shipper,groups_logistic_manager,1,1,1,1
- 11 access_shipper_user,access.shipper.user,model_shipper,groups_logistic_user,1,1,1,0
- 12 access_receiver_manager,access.receiver.manager,model_receiver,groups_logistic_manager,1,1,1,1
- 13 access_receiver_user,access.receiver.user,model_receiver,groups_logistic_user,1,1,1,0
- 14 access_city_manager,access.city.manager,model_city,groups_logistic_manager,1,1,1,1
- 15 access_city_user,access.city.user,model_city,groups_logistic_user,1,1,1,0
- 16 access_rate_manager,access.rate.manager,model_rate,groups_logistic_manager,1,1,1,1
- 17 access_rate_user,access.rate.user,model_rate,groups_logistic_user,1,0,0,0
- 1 <!--代码所在文件相对路径:odoo\addons\mail\security\mail_security.xml-->
- 2
- 3 <record id="res_users_settings_volumes_rule_user" model="ir.rule">
- 4 <field name="name">res.users.settings.volumes: access their own entries</field>
- 5 <field name="model_id" ref="model_res_users_settings_volumes"/>
- 6 <field name="groups" eval="[Command.link(ref('base.group_user'))]"/>
- 7 <field name="domain_force">[('user_setting_id.user_id', '=', user.id)]</field>
- 8 <field name="perm_read" eval="True"/>
- 9 <field name="perm_write" eval="True"/>
- 10 <field name="perm_create" eval="True"/>
- 11 <field name="perm_unlink" eval="True"/>
- 12 </record>
2.通过groups来指定记录规则所属的用户组,如果记录规则未指定用户组,那么当前规则就是全局规则。全局规则会影响到所有的用户,不管用户属于哪个用户组。通过全局规则,可以在模型上设置默认的访问策略,例如限制用户只能访问属于自己公司的记录,配置如下所示:
- 1 <record id="global_rule" model="ir.rule">
- 2 <field name="name">Global Rule</field>
- 3 <field name="model_id" ref="your_module.your_model"/>
- 4 <field name="domain_force">[('company_id', '=', user.company_id.id)]</field>
- 5 </record>