安全权限控制列表
现在我们可以对指定组(To-do User)进行指定模型的权限授予,在上述表单的Access Rights标签下添加一条记录,对应的值为:
- Name: To-do Item User Access
- Object: 在列表中选择To-do Item
- 勾选Read Access, Write Access, Create Access, and Delete Access
模型权限也可通过Settings > Technical > Security > Access Rights进行管理。我们无需向 Partner 模型添加权限,因为我们的组继承了内部用户组,已经获取了相应权限。
现在可以将 admin 用户添加到新建组来测试新加的权限设置
1、 在菜单中点击Users & Companies > Users,从用户列表中选择Mitchell Admin,然后编辑表单
2、 在Access Rights标签下的 Other 版块,会发现一个名为 To-do User 的复选框用于让用户加入权限组,勾选后点击 Save 保存表单。
如果一切操作都正确的话,我们就可以看到 To-do 顶级菜单,用于添加任务清单项,并且我们只能访问自己的任务清单而看不到其它人的。(请先执行创建菜单项部分再进行查看)
安全记录规则
在对模型赋予访问权限时,默认用户可以访问到他的所有记录。但有时我们要限制每个用户所能访问的特定记录。通过记录规则可以实现这一点,通过定义 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,该处背景也会变成黄黑间隔的条状,以清晰地告知用户激活了超级用户。仅在绝对必要时才应使用这一操作,超级用户不受权限控制这点会导致数据的不一致,比如在多公司场景下,所以应尽量避免。
创建菜单项
现在有了存储任务清单的模型,应在用户界面中显示它,添加菜单项可实现这一点。我们这里创建一个顶级菜单项直接打开任务清单,一些像联系人(Contacts)这样的应用采取了这种方式,但另外一些则使用了在顶栏中的子菜单项。
“ 注意:Odoo 12的修改
社区版中第一级以下的菜单项也像企业版中一样显示在了顶栏中,而此前版本社区版的菜单项显示在屏幕的左侧。”
点击菜单Settings > Technical > User Interface > Menu Items,点击 Create 即可进入菜单的编辑页面。在该页面中输入如下值:
- Menu: To-do
- Parent Menu: 留空
- Action: 选择ir.actions.act_window,然后在右侧下拉框中点击Create and Edit打开一个相关的窗口操作表单
- 在弹出的表单中填入:
- Action name: To-do Items
- Object: x_todo_item (目标模型的编码标识)
显示效果如下:
保存所有打开的表单,此时即可在菜单中使用 To-do 应用了。
要在菜单中显示该项,需要重载客户端页面,大多数浏览中可使用快捷键 F5(强制刷新:Windows: Ctrl+F5, Mac: Cmd+F5)。现在就可以访问菜单项并进行任务清单模型的交互了。虽然我们没有创建视图,但强大的 Odoo 框架自动为我们生成了一个基础视图:
在本例中,在顶级菜单中直接添加了一个操作,而没有子菜单。但菜单可以包含一系列带有父子关系的菜单项,最末级菜单项关联一个动作(Action),定义有选取时执行的行为。 动作名将作为所展示视图的标题。
有很多的操作类型,最重要的有窗口(window)、报表(reports)和服务端(server)动作。窗口动作最常用,用作在客户端中展示视图,报表动作用于运行报表,服务端动作用于定义自动化任务。
截至目前,我们都聚焦在显示视图的窗口动作上,正是使用了直接在菜单项表单中创建的窗口操作来创建了任务清单的菜单项。我们也可以在Settings > Technical > Actions中查看和编辑动作,在本例中仅需使用窗口操作。
“ 小贴士:很多情况下使用开发者工具中的 Edit Action 选项更为方便,它提供一个编辑当前视图窗口操作的快捷方式。”
接下来我们进入到下一部分,创建我们的视图。

2020-02-23 13:15:47