配置ODOO12安全权限控制

Odoo自带有权限控制机制,用户仅能使用被授权了的功能。这就意味着我们自建的库功能不对普通用户甚至是管理员开放。

Odoo 安全权限通过安全组来设置访问权限。每个用户的权限根据所属组来决定,对于我们的测试项目,我们将创建一个 to-do 用户组,然后通过组来分配可使用功能的用户。我们通常使用 ACL 为某个组赋予指定模块的读或写权限,就当前项目,我们对添加的 to-do 项模型添加读和写权限。

此外,我们还可以设置用户对指定模型的记录范围的访问规则。本项目中 to-do 项为用户私有,所以用户仅能访问自己创建的记录,这通过安全记录规则实现。

安全组

访问控制基于组,通过安全组对模型设置权限,控制组内用户所能使用的菜单项。要做更精细化的控制,我们可以对指定菜单项、视图、字段甚至是(带有记录规则的)数据记录进行权限控制。

安全组还可以对应用进行管理,通常每个应用有两个组:用户组(Users)可执行日常操作、管理员组(Manager)可对应用执行所有配置。

下面我们新建一个安全组,在开发者模式下菜单中访问设置>管理中心>群组
配置ODOO12安全权限控制
点击创建按钮,通过如下值创建一条新记录:

  • 应用: 留空
  • 名称: To-do User
  • 继承标签下: 添加用户类型/内部用户项

效果如下:
配置ODOO12安全权限控制
在应用下拉列表中还没有to-do 应用,所以我们直接通过组表单来添加。我们还继承了内部用户用户组,那么这个组的成员也会自动(递归)成为所继承组的成员,以获取他们原有的权限。内部用户是基础权限组,通常应用的安全组都继承它。
安全权限控制列表
现在我们可以对指定组(To-do User)进行指定模型的权限授予,在上述表单的访问权限标签下添加一条记录,对应的值为:

  • 名称: To-do Item User Access
  • 对象: 在列表中选择To-do Item
  • 勾选Read Access, Write Access, Create Access, and Delete Access
    配置ODOO12安全权限控制
    模型权限也可通过设置>技术>安全>访问权限进行管理。我们无需向Partner 模型添加权限,因为我们的组继承了内部用户组,已经获取了相应权限。
    配置ODOO12安全权限控制
    现在可以将 admin 用户添加到新建组来测试新加的权限设置

1、在菜单中点击设置>管理中心>用户,从用户列表中选择Mitchell Admin,然后编辑表单
配置ODOO12安全权限控制
2、在访问权限标签下的其他版块,会发现一个名为 To-do User 的复选框用于让用户加入权限组,勾选后点击保存按钮保存表单。
配置ODOO12安全权限控制
如果一切操作都正确的话,我们就可以看到 To-do *菜单,用于添加任务清单项,并且我们只能访问自己的任务清单而看不到其它人的。
安全记录规则
在对模型赋予访问权限时,默认用户可以访问到他的所有记录。但有时我们要限制每个用户所能访问的特定记录。通过记录规则可以实现这一点,通过定义 domain 过滤器来对读和写操作进行控制。

比如我们这里的 to-do 应用,任务项应为用户私有,我们不希望其他用户看到自己的记录。需要添加记录规则来过滤出创建者自己的记录:

  • 框架会自动添加create_uid字段,并存储创建记录的用户,通过该字段可以确定每条记录的创建者
  • 在user变量中可获取到当前用户,user 变量读取上下文中 domain 过滤器过滤后的对象

通过[(‘create_uid’, ‘=’, user.id)]域表达式可实现这点。

通过菜单中的设置>技术>安全>记录规则进入记录规则设置页,
配置ODOO12安全权限控制
点击创建按钮并输入如下值:

  • 名称: 一个描述性的标题,这里使用 To-do Own Items
  • 对象: 在列表中选择模型,此处为To-do Item
  • 访问权限: 规则所授予的操作,这里保留全部勾选
  • 规则定义: 域筛选器,填写 [(‘create_uid’,’=’, user.id)]
  • 群组: 作用的安全组,选择To-do User组

效果如下:
配置ODOO12安全权限控制
此时就完成了记录规则的设定,现在可以试试用 Admin 和 Demo 用户(需提前将 Demo 用户加入到安全组)分别创建几个任务项,各自将只能看到自己创建的任务。记录规则可通过右上角的切换按钮进行关闭,一旦关闭,用户就可以看到所有人的任务清单了。

视频演示:

http://ctdrive.tderp.com/file/13502532-460836714

http://www.tderp.com/download/details/odoo12-846