Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

odoo base_security.xml



  •  <record model="res.groups" id="group_erp_manager">
                <field name="name">Access Rights</field>
            </record>
    
            <record model="res.groups" id="group_system">
                <field name="name">Settings</field>
                <field name="implied_ids" eval="[(4, ref('group_erp_manager'))]"/>
                <field name="users" eval="[(4, ref('base.user_root'))]"/>
            </record>
    
            <record model="res.groups" id="group_user">
                <field name="name">Employee</field>
            </record>
    
            <record id="default_user" model="res.users">
                <field name="groups_id" eval="[(4,ref('base.group_user'))]"/>
            </record>
    
            <record model="res.groups" id="group_multi_company">
                <field name="name">Multi Companies</field>
            </record>
    
            <record model="res.groups" id="group_multi_currency">
                <field name="name">Multi Currencies</field>
            </record>
    
            <record model="res.groups" id="group_no_one">
                <field name="name">Technical Features</field>
            </record>
            <record model="res.groups" id="group_user">
                <field name="implied_ids" eval="[(4, ref('group_no_one'))]"/>
                <field name="users" eval="[(4, ref('base.user_root'))]"/>
            </record>
    
            <record model="res.groups" id="group_partner_manager">
                <field name="name">Contact Creation</field>
            </record>
    
            <record id="default_user" model="res.users">
                <field name="groups_id" eval="[(4,ref('base.group_partner_manager'))]"/>
            </record>
    

    上面是odoo中关于用户组的源码,有几个问题请教各位:

    1. xml id="default_user",有两个,分别是
    <record id="default_user" model="res.users">
                <field name="groups_id" eval="[(4,ref('base.group_user'))]"/>
            </record>
    <record id="default_user" model="res.users">
                <field name="groups_id" eval="[(4,ref('base.group_partner_manager'))]"/>
            </record>
    

    问题是:这样的话,default_user到底是哪个起作用?id="group_partner_manager"Contact Creation这个组什么作用,如果default_user有这个组的权限,那就crud权限都有,会跟自定义模型中定义的crud冲突的?

    2.id="group_no_one"Technical Features这个是有什么作用的?

    3.我想重写default_user这个用户组,是所有的default_user只有read的权限,这样写是错的(如下),什么原因呢?或者其他解决办法吗?

    <record model="res.groups" id="sps_group_partner_manager">
            <field name="name">SPS Contact Creation</field>
            <field name="category_id" ref="module_category_extra"/>
            <field name="implied_ids" eval="[(4, ref('base.default_user'))]"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
            <field name="perm_read" eval="True"/>
            <field name="perm_write" eval="False"/>
            <field name="perm_create" eval="False"/>
            <field name="perm_unlink" eval="False"/>
        </record>
    

    各路大神给指导下,先行谢谢了.


  • 管理员

    1.这样的话,default_user到底是哪个起作用?id="group_partner_manager"的Contact Creation这个组什么作用,如果default_user有这个组的权限,那就crud权限都有,会跟自定义模型中定义的crud冲突的?

    都起作用了,xml会按顺序执行,分别给default_user添加了权限组'base.group_userbase.group_partner_managergroup_partner_manager默认的权限是可以创建业务伙伴,至于会不会跟你自定义模型的CRUD冲突,那就要看自定义模型怎么定义有关系了

    2.id="group_no_one"的Technical Features这个是有什么作用的?

    一般都是系统技术配置菜单,默认是隐藏起来,一般操作人员不需要访问。

    3.我想重写default_user这个用户组,是所有的default_user只有read的权限,这样写是错的(如下),什么原因呢?或者其他解决办法吗?

    default_user是用户,不是用户组,你这里的<field name="implied_ids" eval="[(4, ref('base.default_user'))]"/>应该会有报错,至于你问的问题要修改系统自带的用户组,只要xml_id是系统原来就有的,更新模块的时候就会把你的修改更新到系统里面,例如:

    <record id="系统模块名.要修改的XML-ID" model="模型名">
        <field name="name">新名字</field>
    </record>
    

    default_user定义

            <!-- Default user with full access rights for newly created users -->
            <record id="default_user" model="res.users">
                <field name="name">default user</field>
                <field name="login">default</field>
                <field name="active" eval="False"/>
            </record>
    


  • @joshua
    问题1.group_partner_manager默认的权限是可以创建业务伙伴,这个没用到,不是很理解.
    我用到是:这个组默认的read,write,create,unlink的权限都是True.至于会跟我自定义模型的CRUD冲突,是因为:比如我定义的模型中有些没有给create权限的,由于default user默认属于group_partner_manager这个组,最后的实际的结果是我定义的没有create权限的用户反而也有create权限了.
    所以,我理解的是,odoo系统中自定义的用户的权限应该是default user跟自定义user的权限的相加.

    新考虑的问题:如果是重写系统默认的用户或者用户组,是不是先要继承原先的视图,跟xml继承一样.
    基于以上考虑,做了如下尝试:
    因为default user默认属于group_partner_manager组,我现在只是不想admin创建的用户,有这个组的权限.那么我是重写defult user``还是重写group_partner_manager```组的权限比较好呢,还是两个都一样呢?

    问题3的试验:
    第一种:重写default user,代码如下,报错如下:

    <record model="res.users" id="default_user">
            <field name="name">Default User</field>
            <field name="inherit_id" ref="base.default_user"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
            <field name="groups_id" eval="[(4,ref('base.group_user'))]"/>
            <field name="category_id" ref="module_category_sps_base"/>
            <field name="perm_read" eval="True"/>
            <field name="perm_write" eval="False"/>
            <field name="perm_create" eval="False"/>
            <field name="perm_unlink" eval="False"/>
        </record>
    

    报错信息:

    2017-09-18 02:27:11,696 4686 ERROR 0905 werkzeug: Error on request:
    Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 180, in run_wsgi
        execute(self.server.app)
      File "/usr/lib/python2.7/dist-packages/werkzeug/serving.py", line 168, in execute
        application_iter = app(environ, start_response)
      File "/home/odoo/odoo-dev/odoo/odoo/service/server.py", line 250, in app
        return self.app(e, s)
      File "/home/odoo/odoo-dev/odoo/odoo/service/wsgi_server.py", line 184, in application
        return application_unproxied(environ, start_response)
      File "/home/odoo/odoo-dev/odoo/odoo/service/wsgi_server.py", line 170, in application_unproxied
        result = handler(environ, start_response)
      File "/home/odoo/odoo-dev/odoo/odoo/http.py", line 1306, in __call__
        return self.dispatch(environ, start_response)
      File "/home/odoo/odoo-dev/odoo/odoo/http.py", line 1280, in __call__
        return self.app(environ, start_wrapped)
      File "/usr/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 591, in __call__
        return self.app(environ, start_response)
      File "/home/odoo/odoo-dev/odoo/odoo/http.py", line 1461, in dispatch
        odoo.registry(db).check_signaling()
      File "/home/odoo/odoo-dev/odoo/odoo/__init__.py", line 52, in registry
        return modules.registry.Registry(database_name)
      File "/home/odoo/odoo-dev/odoo/odoo/modules/registry.py", line 59, in __new__
        return cls.new(db_name)
      File "/home/odoo/odoo-dev/odoo/odoo/modules/registry.py", line 82, in new
        odoo.modules.load_modules(registry._db, force_demo, status, update_module)
      File "/home/odoo/odoo-dev/odoo/odoo/modules/loading.py", line 335, in load_modules
        force, status, report, loaded_modules, update_module)
      File "/home/odoo/odoo-dev/odoo/odoo/modules/loading.py", line 237, in load_marked_modules
        loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
      File "/home/odoo/odoo-dev/odoo/odoo/modules/loading.py", line 156, in load_module_graph
        _load_data(cr, module_name, idref, mode, kind='data')
      File "/home/odoo/odoo-dev/odoo/odoo/modules/loading.py", line 95, in _load_data
        tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
      File "/home/odoo/odoo-dev/odoo/odoo/tools/convert.py", line 845, in convert_file
        convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
      File "/home/odoo/odoo-dev/odoo/odoo/tools/convert.py", line 915, in convert_xml_import
        obj.parse(doc.getroot(), mode=mode)
      File "/home/odoo/odoo-dev/odoo/odoo/tools/convert.py", line 796, in parse
        self.parse(rec, mode)
      File "/home/odoo/odoo-dev/odoo/odoo/tools/convert.py", line 799, in parse
        self._tags[rec.tag](rec, de, mode=mode)
      File "/home/odoo/odoo-dev/odoo/odoo/tools/convert.py", line 707, in _tag_record
        id = self.env(context=rec_context)['ir.model.data']._update(rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode)
      File "/home/odoo/odoo-dev/odoo/odoo/addons/base/ir/ir_model.py", line 1184, in _update
        " you can't define a `%s` record with this ID." % (xml_id, imd_model, model)
    ParseError: "External ID conflict, default_user already refers to a `res.groups` record, you can't define a `res.users` record with this ID." while parsing /home/odoo/odoo-dev/odoo/abbsps/sps_base/security/base_security.xml:83, near
    <record model="res.users" id="default_user">
            <field name="name">Default User</field>
            <field name="inherit_id" ref="base.default_user"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
            <field name="groups_id" eval="[(4,ref('base.group_user'))]"/>
            <field name="category_id" ref="module_category_sps_base"/>
            <field name="perm_read" eval="True"/>
            <field name="perm_write" eval="False"/>
            <field name="perm_create" eval="False"/>
            <field name="perm_unlink" eval="False"/>
        </record>
    

    第二种:重写group_partner_manager组的权限:

    <record model="res.groups" id="group_partner_manager">
            <field name="name">Contact Creation</field>
            <field name="category_id" ref="module_category_sps_base"/>
            <field name="perm_read" eval="True"/>
            <field name="perm_write" eval="False"/>
            <field name="perm_create" eval="False"/>
            <field name="perm_unlink" eval="False"/>
        </record>
    

    测试过程:编辑原来的用户或者新建用户,这个组的权限还在,不能默认不勾选,所以代码不起作用,或者写错了.


  • 管理员

    感觉可能你不太理解XML的record标签,它是用来定义数据库记录的,model是记录对应的模型,子标签里面的<field name="字段名">就是这个记录里面的字段名,你写的方案一:<record model="res.users" id="default_user">,声明它是一个res.users记录,但是除了groups_id其他字段都不是res.users的。如果你想要default user不默认属于group_partner_manager组,你可以

    <record model="res.users" id="base.default_user">
        <field name="groups_id" eval="[(3, ref('base.group_partner_manager'))]"/>
    </record>
    

    注意,我这里是base.default_user,而不是default_user,这个应该是你第一条错误的原因。



  • @joshua
    我想剔除这个组,是因为创建用户的时候总是默认勾选这个组,而且勾选上这个组后,比如A组对应的模型中,本来没有create,unlink的权限,加上这个组后也会有create,unlink的权限.这样就跟我csv中写的权限有冲突.

    再看代码,对于create,unlink的这些权限是在ir.rule和ir.model.access中给的,现在是想知道,这些groups跟create.unlink怎么联系的.然后才能进行下一步.


  • 管理员

    我上个回复的帖子就是剔除group_partner_manager用户组了,你可以试试。至于你odoo的权限配置逻辑可以参考
    文档:https://www.odoo.com/documentation/10.0/reference/security.html#field-access
    还有我们的一个博文:http://cn.openerp.cn/record_rule/



  • @joshua
    我看了,知道你上个帖子上删除用户组group_partner_manager,也测试了,但是我新建用户的时候还是会默认勾选这个组,不知道是不是不是因为这个组的问题,所以我又重新描述了下问题.



  • @joshua
    有个group_erp_manager组,这个组是什么成员会属于这个组的?


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待