跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 新手求助
  4. odoo base_security.xml

odoo base_security.xml

已定时 已固定 已锁定 已移动 Odoo 新手求助
8 帖子 2 发布者 4.0k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    hui
    写于 最后由 编辑
    #1
     <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 条回复 最后回复
    0
    • JoshuaJ 离线
      JoshuaJ 离线
      Joshua 管理员
      写于 最后由 编辑
      #2

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

      都起作用了,xml会按顺序执行,分别给default_user添加了权限组'base.group_user,base.group_partner_manager,group_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 AT openerp.cn),欢迎关注公众号:openerp_cn

      H 1 条回复 最后回复
      0
      • H 离线
        H 离线
        hui
        在 回复了 Joshua 最后由 编辑
        #3

        @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>
        

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

        1 条回复 最后回复
        0
        • JoshuaJ 离线
          JoshuaJ 离线
          Joshua 管理员
          写于 最后由 编辑
          #4

          感觉可能你不太理解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 AT openerp.cn),欢迎关注公众号:openerp_cn

          H 1 条回复 最后回复
          0
          • H 离线
            H 离线
            hui
            在 回复了 Joshua 最后由 编辑
            #5

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

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

            1 条回复 最后回复
            0
            • JoshuaJ 离线
              JoshuaJ 离线
              Joshua 管理员
              写于 最后由 编辑
              #6

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

              【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

              H 2 条回复 最后回复
              0
              • H 离线
                H 离线
                hui
                在 回复了 Joshua 最后由 编辑
                #7

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

                1 条回复 最后回复
                0
                • H 离线
                  H 离线
                  hui
                  在 回复了 Joshua 最后由 编辑
                  #8

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

                  1 条回复 最后回复
                  0

                  • 登录

                  • 没有帐号? 注册

                  • 登录或注册以进行搜索。
                  • 第一个帖子
                    最后一个帖子
                  0
                  • 版块
                  • 标签
                  • 热门
                  • 用户
                  • 群组