python - res.partner 上的“write”高级访问权限
问题描述
write()
使用参数 ( )提供的数据是否vals
可以从方法内访问check_access_rights
?
如果该孩子是由该用户创建的 (create_uid = user.id) ,我继承res.partner
并覆盖了方法check_access_rights
,以允许没有写入权限的用户res.partner
更新(该合作伙伴的)。child_ids
我希望能够在某个地方(在方法write
或check_access_rights
)中实现这个伪代码:
if `the user belongs to a group "GroupX"` and `user tries to only update field "child_ids" with records that are created by that user`
then `allow this write operation on res.partner`
else `raise AccessError`
解决方案
让用户(来自“X组”)修改由他创建的 res.partner 对象,并让修改由任何人创建的 res.partner 对象上的 child_ids:
首先在 res.partner 上创建一个具有以下权限的组“Group X”:a) r,w,c,u ;b) ir.property 上的 r,w,c。
然后创建一个继承自 res.partner 的类并覆盖方法write
。
# -*- coding: utf-8 -*-
class InheritedResPartner(models.Model):
"""Description"""
_inherit = 'res.partner'
@api.multi
def write(self, vals):
is_in_group = 'Group X' in map(lambda x: x.name, self.env.user.groups_id)
if is_in_group:
operation = 'write'
owns_record = self.create_uid == self.env.user
if owns_record:
True
else:
allowed = True
# Do all checks further and set `allowed` to either True or False
...<omitted intentionaly> put your logic here
#
if not allowed:
raise AccessError(_('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: %s, Operation: %s)') % (self._description, operation))
return super(InheritedResPartner, self).write(vals)
注意:我们授予 res.partner 的全部权限,但如果检测到不需要的操作,我们将覆盖 write 方法并引发 AccessError。
推荐阅读
- pandas - 使用单独列的子集作为条件创建具有一列最大值的新数据框
- react-native - React Native Firebase:检查模块是否已安装
- javascript - 使用 trueclient vugen 工具在文本框字段内按空格键?
- android - Android 9+ 设备在提示通知中缺少应用程序图标
- json - POSTGRESQL 将 jsonb 值复制到新列
- python - 发生异常:FileNotFoundError (PIL)
- security - 通过 API 将视频从客户端直接上传到 Vimeo
- javascript - 是动态生成的显示数字或字母的图标 (PNG)
- mysql - 在 Testlink 安装中找不到 MySql
- javascript - EventSourcePolyfill 与原生 EventSource(性能方面)