【问题标题】:Odoo 13: Check if the user has "delete access"Odoo 13:检查用户是否有“删除权限”
【发布时间】:2022-06-17 03:44:47
【问题描述】:

我遇到了这个问题,我需要检查用户是否启用了删除访问权限,然后更改布尔变量的值以隐藏特定字段。每次我运行代码时,它都不会更改布尔变量的值。如何将 check_access_rule 实施为条件?

查看(xml):

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
  <record id="hr_some_id" model="ir.ui.view">
      <field name="name">hr.model.form.inherit</field>
      <field name="model">hr.model_name</field>
      <field name="inherit_id" ref="hr_model_view_form_inherit"/>
      <field name="arch" type="xml">
          <data>
              <xpath expr="//notebook/page[@name='page']/div[1]" position="before">
                  <group string="Some Info">
                    <field name="some_ids" readonly="True" nolabel="1">
                      <tree default_order="create_date desc">
                        <field name="has_delete_access" invisible="1"/>
                        <button name="unlink" type="object" string="Delete" class="oe_stat_button" icon="fa-times" groups="base.group_user" attrs="{'invisible':[('has_delete_access','=',False)]}"/>
                      </tree>
                    </field>
                  </group>
              </xpath>
          </data>
      </field>
  </record>
</odoo>

Python:

class ModelName(models.Model):
    _name = 'hr.model_name'
    _description = 'Some Info'

    has_delete_access = fields.Boolean(compute="_compute_check_access_history", string='Has Delete Access?', default=False)

    def _compute_check_access_history(self):
        if self.env.user.check_access_rule('perm_unlink'):
            self.has_delete_access = False
        else:
            self.has_delete_access = True

【问题讨论】:

    标签: python xml odoo odoo-13


    【解决方案1】:

    check_access_rule 函数中使用unlink 而不是perm_unlink

    来自check_access_rule源代码:

    def check_access_rule(self, operation):
    """ 验证operation 给出的操作是否允许
             根据ir.rules当前用户。

             :参数操作:write 之一, unlink
            :引发用户错误:* 如果当前 ir.rules 不允许此操作。
             :返回:如果允许该操作,则无
        """

    示例:

    self.check_access_rule('unlink')
    

    【讨论】:

      【解决方案2】:

      您可以创建两个组,其中一个具有额外的删除权限,然后将按钮与删除权限的组关联,这样如果用户有这个组,他就会看到按钮,例如:在安全文件中创建两个组:

      <record id="group_read_write_create" model="res.groups">
          <field name="name">Reading, writing, and creation permisions</field>
          <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
      </record>
      
      <record id="group_read_write_create_unlink" model="res.groups">
          <field name="name">Reading, writing, creation, and unlinking permisions</field>
          <field name="implied_ids" eval="[(4, ref('group_read_write_create'))]"/>
      </record>
      

      然后在.csv文件中定义两个访问权限:

      access_hr_model_name_read_write_create,hr.model.name.read.write.create,model_hr_model_name,group_read_write_create,1,1,1,0
      access_hr_model_name_read_write_create_unlink,hr.model.name.read.write.create.unlink,model_hr_model_name,group_read_write_create_unlink,1,1,1,1
      

      并在视图中将按钮与删除权限组关联:

      <xpath expr="//notebook/page[@name='page']/div[1]" position="before">
        <group string="Some Info">
          <field name="some_ids" readonly="True" nolabel="1">
            <tree default_order="create_date desc">
              <button name="unlink" type="object" string="Delete" class="oe_stat_button" icon="fa-times" groups="module_name.group_read_write_create_unlink"/>
            </tree>
          </field>
        </group>
      </xpath>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 2016-04-23
        • 2019-06-26
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        相关资源
        最近更新 更多