odoo中的权限管理

odoo的权限管理总结,经验之谈,欢迎指正。

模型权限设置

在一个模块中新建了一个模型都必须对此模型进行权限配置,因为默认模型是没有任何权限设置的,开发的时候使用admin账号可以看到但正常账户是无法看见模型的。所以这是最基本的权限配置,哪怕你的模块没有特殊权限对所有人都开放也必须进行配置。

  • 对模型的权限设置一般是在security/ir.model.access.csv文件中进行配置。格式如下
# 第一行是表头,表示分别需要填入的值 即 id,name,模型,用户组,最后四个为读,写,创建,删除权限
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink

id是系统用来识别每一个模型权限设置的唯一识别,所以必须是一个唯一值,name是个人用于识别模型权限的识别字段,也要唯一。其实这两个字段只要保持唯一性即可按照个人习惯进行命名。当然官方也提供了一个推荐命名规则:

  • id: access_模型名_特定用户组名
  • name:模型名.用户组名
    第三个字段是指定模型就必须按照规则写了
  • model: model_模型名
    第四个字段用户组,一般为空代表对所有用户组执行。
    后四个权限字段 1表示有权限 0表示没有权限
    所以一条权限定义:
    access_my_model,my_model,model_my_model,,1,1,1,0
    解读为所有用户拥有对模型my_model的读,写,创建权限但是没有删除权限。
    对一个模块可以设置多个权限明细,比如新增一条权限定义
    access_my_model_system,my_model.system,model_my_model,base.group_system,1,1,1,1
    解读为在base.group_system用户组里的用户拥有对模型my_model的读,写,创建权限但是没有删除权限。

用户组设置

在上面我们说到了用户组的概念,其实这就是字面分组的意思,在不同的组的人可以有不同的权限,当然一个用户可以拥有多个用户组。

  • 用户组定义一般是在security/security.xml中
    一个用户组的定义如下:
# 首先定义一个用户组的类别 同一个类别中有不同的用户组但是用户只能选择其中一个
<record id="module_mrp" model="ir.module.category">
  <field name="name">制造</field>
  <field name="sequence">27</field>
   <field name="comment">制造权限类别</field>
</record>

# 定义一个员工组
<record id="mrp_group_user" model="res.groups">
  <field name="name">用户</field>
  <field name="comment">制造普通用户</field>
  # 属于哪一个用户组类别,填入上面点定义用户组类别的id
  <field name="category_id" ref="module_mrp"/>
  # 继承用户 ,继承使base.group_user里的用户都属于整个用户组
  <field name="implied_ids" eval="[(4, ref(‘base.group_user‘))]"/>
</record>

# 定义一个经理组
<record id="mrp_group_manager" model="res.groups">
  <field name="name">经理</field>
  <field name="comment">制造管理员</field>
  <field name="category_id" ref="module_mrp"/>
  <field name="implied_ids" eval="[(4, ref(‘mrp_group_user‘))]"/>
  # 默认用户 ,设置base.user_root用户组里的用户也是该用户组用户
  <field name="users" eval="[(4, ref(‘base.user_root‘))]"/>
</record>

其实无论使用implied_ids还是users都是为了给新建的用户组填入默人用户,但这并不是一定要设置的。

基于用户组的权限控制

建立用户组后我们可以进行按组对字段进行权限控制

  • 在模型的xml视图中
# 在网页展示的视图中,只有mrp_group_manager的用户才能看到name字段
<field name="name" groups="mrp.mrp_group_manager"/>

注意调用其他模块的用户组一定要加上模块名.

  • 在python代码中
# name字段只有mrp_group_user,mrp_group_manager用户则才能看见,但只有mrp_group_manager用户能进行编辑
name = fields.Char(string=u‘名字‘,read=[‘mrp_group_user‘,‘mrp_group_manager‘],        write=[‘mrp_group_manager‘])

记录管理规则

以上两个都是针对整个模型而言设置的权限,接下来就是针对模型中不同的记录进行权限设置,比如员工只能看见自己创建的订单而看不了别人的。

<record model="ir.rule" id="mrp_user_rule">
  <field name="name">查看自己的订单</field>
  # model_id 作用于哪个模型 值为 model_模型名
  <field name="model_id" ref="model_mrp"/>
  # 设置domain 创建者为当前用户
  <field name="domain_force">[(‘create_uid‘,‘=‘,user.id)]</field>
  # 该规则使用于哪个用户组mrp
  <field name="groups" eval="[(4, ref(‘mrp.mrp_group_user‘))]"/>
  # 还可以详细配置对记录的读写创建删除权限
  <field name="perm_read" eval="1" />
  <field name="perm_write" eval="1" />
  <field name="perm_create" eval="1" />
  <field name="perm_unlink" eval="0" />
</record>

总结

从对模型权限设置,到基于用户组可以对每个字段进行的权限控制,再加上利用设置权限规则可以对记录进行权限。odoo的权限管理还是十分完善的,合理的配合使用基本上是可以完成任何复杂的权限设置的。

原文地址:https://www.cnblogs.com/wwh/p/11557761.html

时间: 2024-11-09 05:12:36

odoo中的权限管理的相关文章

数据库中的grant权限赋予和系统中的权限管理是两码事。

数据库中的grant权限赋予和系统中的权限管理是两码事.grant一般是赋给个人的,对全部或单个数据库的增删改查等权限,不多说.权限管理系统 在数据库中建表,存角色,权限,不同的菜单,在java层面上写代码控制的.用filter或if等都能控制.参考资料:grant:http://www.cnblogs.com/Richardzhu/p/3318595.htmlhttp://blog.csdn.net/leshami/article/details/5688875http://7567567.b

【源码笔记】BlogEngine.Net 中的权限管理

BlogEngine.Net 是个功能点很全面的开源博客系统,容易安装和实现定制,开放接口支持TrackBack,可以定义主题配置数据源等等.可谓五脏俱全,这里先记录一下它基于Membership的权限管理(一般只说到角色就没了). Membership是.net2.0的时候就出来了,现在的最新版本是Identity(微软已经将这个Asp.net项目开源 https://github.com/aspnet/Identity ).权限管理就是处理用户.角色.和具体权限的关系.用户和角色是多对多的关

Android中的权限管理(基于Permission ProtectionLevel)

1.什么是protectionlevel呢? 我们经常在AndroidManifest中使用权限,如果我们想让应用程序可以发短信,那么应该这样写: <uses-permission android:name="android.permission.SEND_SMS" /> 那么这个权限的定义是在哪里定义的呢?如下: frameworks/base/core/res/AndroidManifest.xml <permission android:name="a

统一身份管理中的权限管理设计

关注嘉为科技,获取运维新知 权限集中管理是统一身份管理关注的主要内容之一,由于企业应用建设的自身历程不同,权限设计与实现也必然存在差异,针对集中权限管理的设计和实现带来了不小的挑战,本文根据多年的实践经验,就统一身份管理的集中权限管理的设计与实现给予设计建议. 一 问题背景 随着信息技术和网络技术的迅猛发展,企业内部的应用系统越来越多,为此,为减少用户访问的麻烦,提升访问的便利性和体验,众多企业采用了统一身份管理的方案来解决该问题. 就企业的统一身份管理,业界提出了相应的标准,即4A标准,分别是

Android中的权限管理(基于uid gid gids setUid)

我们首先来说一下传统的Linux基于uid,gid的权限管理机制: 1.用户的uid gid gids: Ubuntu操作系统当前登陆的用户是jltxgcy,那么该用户的uid为jltxgcy,gid也是jltxgcy,那么gids怎么查看呢? 答案是使用命令:cat /etc/group | grep jltxgcy.如下图: 用户的gids的名字为adm,dialout,cdrom,plugdev,lpadmin,admin,sambashare.此本分请参考linux用户组./etc/gr

Linux中ACL权限管理

用户的特殊权限 我们在之前的课程中已经讲过了基本权限.所谓的基本权限指得是,用户对文件拥有所有者所属组和其他人每个身份都有三个权限分别是读.写.执行,今天我们将介绍特殊权限ACL权限. 所谓了ACL权限指的针对一个目录或文件指定一个用户,为这个用户分配指定的权限. 这个ACL权限一般用在需要指定的用户拥有一定的权限的时候才会使用,就相当于windows的文件夹或文件的权限一样的,需要哪个用户有哪些权限就分配就可以了. 举一个例子 图1 上图为一个班级的共享目录,老师属于这个目录的所属主,拥有rw

Linux中文件权限管理

1 文件权限存在的意义系统最底层安全设定方法之一保证文件可以被可用的用户做相应操作 2 文件权限的查看ls -l file ##查看文件的属性.大小等详细信息ll file ##同上ls -d ##列出目录或文件本身,而不是目录或文件的内容ls -ld file ##组合使用,更加详细ll -d file ##同上 3.文件权限读取内容解释示例为目录文件 [1] : 文件的类型相似的参数类型 ##空文件d ##目录l ##软链接s ##socket 套接字 相当于门 一个出口或者入口b ##bl

Java中的权限管理

java中有四个权限,分别为private,protected,default,public,不写即为default,每个权限分别为如下表格: private default protected public 本类可访问 是 是 是 是 本包非本类可访问 否 是 是 是 非本包的子类可访问 否 否 是 是 非本包的类 否 否 否 是 另外类成员的权限不得大于类的权限,如果大于,以类的权限为准.即如下的一个类: class Test{     public int i=0;     public 

Linux中的权限管理命令-chmod

命令名称:chmod 英文原意:change the permissions mode of a file 执行权限:所有用户 语法:chmod [{ugoa}{+-=}{rwx}][文件或目录] [mode=421][文件或目录] -R 递归修改 功能:修改目录或文件的权限 u:user(所有者) g:group(所属组) o:other(其他人) a:all(所有人) r:read(读) w:write(写) x:execute(执行) 如上图所示,对于文件test.txt,文件所有者有读写