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的权限管理还是十分完善的,合理的配合使用基本上是可以完成任何复杂的权限设置的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354