安全记录规则
在对模型赋予访问权限时,默认用户可以访问到他的所有记录。但有时我们要限制每个用户所能访问的特定记录。通过记录规则可以实现这一点,通过定义 domain 过滤器来对读和写操作进行控制。
比如我们这里的 to-do 应用,任务项应为用户私有,我们不希望其他用户看到自己的记录。需要添加记录规则来过滤出创建者自己的记录:
⚫ 框架会自动添加 create_uid 字段,并存储创建记录的用户,通过该字段可以确定每条记录的创建者
⚫ 在 user 变量中可获取到当前用户, user 变量读取上下文中 domain 过滤器过滤后的对象通过[(‘create_uid’ ,‘=’ , user.id)]域表达式可实现这点。通过菜单中的 Settings >Technical > Security > Record Rules 进入记录规则设置页,点击 Create 并输入如下值:
⚫ Name: 一个描述性的标题,这里使用 To-do Own Items
⚫ Object: 在列表中选择模型,此处为 To-do Item
⚫ Access Rights: 规则所授予的操作,这里保留全部勾选
⚫ Rule Definition: 域过滤器,填写 [(‘create_uid’ ,‘=’ , user.id)]
⚫ Groups: 作用的安全组,选择 To-do User 组
此时就完成了记录规则的设定,现在可以试试用 Admin 和 Demo 用户(需提前将 Demo 用户加入到安全组)分别创建几个任务项,各自将只能看到自己创建的任务。记录规则可通过右上角的切换按钮进行关闭,一旦关闭,用户就可以看到所有人的任务清单了。
超级用户账号
在此前的 Odoo 版本中, admin 用户是一个特权用户可以不受权限控制。 Odoo 12 就此做了调整, admin 用户属于所有用户安全组,但只是个普通用户。还是存在一个超级用户不受权限控制,但它无法直接登录。我们还是能以超级用户进行操作,当一个用户以 Administration / Settings 用户组登录时,开发者工具菜单中有一个 Become Superuser 选项,或者在登录页面开启开发者模式,则会出一个Login as superuser 的隐藏按钮。在激活了超级用户后,右上角的当前用户显示为 OdooBot,该处背景也会变成黄黑间隔的条状,以清晰地告知用户激活了超级用户。仅在绝对必要时才应使用这一操作,超级用户不受权限控制这点会导致数据的不一致,比如在多公司场景下,所以应尽量避免。