odoo10 权限控制用户只允许看到自己的字段

假设一个小区管理员用户,只想看到自己小区的信息。

首先添加一个用户信息选项卡界面,如下图的 用户 > 隶属信息:

我们在自己创建的user模块中,views文件夹下添加base_user.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <record id="ev_01_base_res_users_inherit_form" model="ir.ui.view">
        <field name="name">res.users.simple.form.inherit</field>
        <field name="model">res.users</field>
        <field name="inherit_id" ref="base.view_users_form"/>
        <field name="arch" type="xml">
            <xpath expr="//page[@name='access_rights']" position="after">
                <page string="隶属信息">
                    <group col="4">
                        <field name="use_community_id"/>
                    </group>
                </page>
            </xpath>
        </field>
    </record>
</odoo>

上述代码中,添加的use_community_id字段是引用的user模型层,如下:

python 复制代码
# -*- coding: utf-8 -*-

from odoo import models, fields, api


class user(models.Model):
    _inherit = 'res.users'


class ResUsers(models.Model):
    """扩展用户类型"""
    _name = "res.users"
    _inherit = "res.users"

    use_community_id = fields.Many2one("community", string=u"所属小区")

    @api.model
    # @tools.ormcache('self._uid')
    def context_get(self):
        # 扩展context,方便xml里面写domain
        user = self.env.user
        result = super(ResUsers, self).context_get()
        result["self_community_id"] = user.use_community_id.id

        return result

user模块的最后一项工作就是在__manifest__.py中添加依赖项,在depends属性中添加需要被权限控制的模块名,添加刚才创建的base_user.xml

在需要被控制的模块的views.xml的action中添加一个名为domain的字段,来控制是否为与当前用户关联的数据。换言之就是,只显示自己数据。

xml 复制代码
<!-- 小区 Action -->
<record id="action_community" model="ir.actions.act_window">
    <field name="name">小区信息</field>
    <field name="res_model">community</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
    <field name="help" type="html">
        <p class="oe_view_nocontent_create">
            创建第一个小区信息
        </p>
    </field>
    <field name="domain">[('id','=',self_community_id)]</field>
</record>

上述代码中的self_community_idResUsers类的context_get方法注册来的。做完这一步,就是注册菜单了,如下代码:

xml 复制代码
<!-- 小区 Menuitem -->
<menuitem id="menu_community_root" name="小区" groups="ev_01.group_tw_use_xq_user"/>
<menuitem id="menu_community" name="小区信息" parent="menu_community_root" action="action_community" sequence="10" groups="ev_01.group_tw_use_xq_user"/>

通过配置多个action和菜单,可以让不同的用户显示不同的菜单,例如超级管理员的菜单应该显示全部小区信息,而小区用户只能显示自己小区的信息。最后记得升级user模块和被权限控制的模块,效果如下:

相关推荐
forEverPlume2 分钟前
mysql如何批量增加表的字段_脚本化DDL操作实践
jvm·数据库·python
asdzx676 分钟前
使用 Python 读取 PDF: 提取文本和图片
开发语言·python·pdf
m0_5964063711 分钟前
CSS如何高效引入样式表_对比link标签与import指令的性能差异
jvm·数据库·python
南宫萧幕28 分钟前
HEV 智能能量管理实战:从 MPC/PPO 理论解析到 Python-Simulink 联合仿真闭环全流程
开发语言·python·算法·matlab·控制
码农的神经元30 分钟前
Python 实现县域变电站智能巡检与抢修调度:地图、路径规划与恢复策略
开发语言·python
weixin_568996061 小时前
c++如何实现日志文件的异步落盘功能_基于无锁队列方案【附代码】
jvm·数据库·python
chaofan9801 小时前
GPT-5.5 全压力测试:为什么 API 聚合调度是解决“首字延迟”的技术关键?
开发语言·人工智能·python·gpt·自动化·api
才兄说1 小时前
机器人二次开发机器人动作定制?定制化舞蹈
python
曲幽1 小时前
FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚
python·fastapi·web·settings·config·pydantic·.env·dotenv·.env.prod
淘矿人2 小时前
2026年4月-DeepSeek V4 vs GPT-5.5深度对比测评:weelinking一键切换实测
服务器·数据库·人工智能·python·gpt·学习·php