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
相关产品推荐
相关产品推荐

