You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 10权限配置:限制用户编辑日记账不可过账,另一类可过账

刚好在Odoo 10里折腾过类似的权限配置,给你一步步拆解怎么实现,还有验证方法也给你列出来:

需求1:用户仅能创建/编辑会计日记账,隐藏过账按钮并禁止过账

Odoo的权限是基于组来管控的,建议优先用自定义组来实现,避免修改默认组影响其他用户:

1.1 配置基础模型权限

  • 进入设置 > 用户与公司 > 权限组,新建一个专属组,比如命名为日记账编辑(禁止过账),所属应用选择会计。
  • 在组的权限设置里,找到会计应用下的日记账模型(对应技术名account.journal),给这个组勾选读取、创建、编辑权限,不要勾选任何与过账相关的权限。
  • 将目标用户添加到这个组中,同时确保用户没有其他会计类的高权限组(比如会计经理)。

1.2 隐藏表单视图的过账按钮

只靠ACL权限还不够,得把前端的Post按钮藏起来:

  • 进入设置 > 技术 > 用户界面 > 视图,搜索account.journal的表单视图(通常名称是account.journal.form)。
  • 找到过账按钮的代码片段,给它添加groups属性,指定只有拥有过账权限的组才能看到,比如默认的会计经理组:
    <button name="action_post" string="Post" type="object" class="btn-primary" groups="account.group_account_manager"/>
    

1.3 后端权限校验(防止绕过前端)

有些用户可能会通过URL、API或者开发者工具直接调用过账方法,所以必须在后端加校验:

  • 找到account/models/account_journal.py文件中的action_post方法,添加权限检查逻辑:
    @api.multi
    def action_post(self):
        # 验证用户是否在允许过账的组内
        if not self.env.user.has_group('account.group_account_manager'):
            raise AccessError(_("You are not allowed to post journals."))
        return super(AccountJournal, self).action_post()
    
需求2:用户拥有所有会计日记账的过账权限

这个实现起来很简单:

  • 直接将目标用户添加到默认的会计经理组(account.group_account_manager),该组默认拥有所有会计相关的过账权限。
  • 如果需要更细粒度的控制,可以新建一个日记账过账专员组,给这个组分配account.journal模型的过账权限,再把用户添加到该组即可。
限制用户过账日记账的验证方法

Odoo提供了多层验证机制来确保过账权限的管控:

  • 前端视图控制:通过给按钮添加groups属性,直接隐藏过账按钮,从交互层面阻止用户操作。
  • 后端方法校验:在过账的核心方法中添加has_group权限检查,即使用户绕过前端调用也会被拦截。
  • 记录规则(Record Rules):如果需要针对特定日记账限制过账,可以创建记录规则,针对account.journal模型设置条件,拒绝目标用户组的过账操作。
  • ACL权限控制:从模型权限层面,确保用户所在组没有过账相关的权限,从根源上禁止操作。

内容的提问来源于stack exchange,提问作者user3655211

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:47:04