【问题标题】:How can I restrict (deny) product creation for some users?如何限制(拒绝)某些用户的产品创建?
【发布时间】:2019-01-21 22:04:17
【问题描述】:

我正在使用Odoo 9,我想拒绝为某些用户创建产品,例如,对于做销售的人,我希望他们只能访问已经创建的产品。他们不得有创造新产品的权利。我该怎么做?请问有什么办法吗?

product.py

class product_product(models.Model):
_inherit = "product.product"

@api.model
def create(self, vals):
if self.env.user.has_group('yor_module.your_group'):
    raise Warning(
        _('Sorry, you are not allowed to create new products.'),
    )
else:
    return super(product_product, self).create(vals)

安全性.xml

 <?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
    <record model="res.groups" id="your_group">
        <field name="name">Group of users who cannot create new products</field>
    </record>
</data>

【问题讨论】:

    标签: python xml python-2.7 odoo odoo-9


    【解决方案1】:

    这个功能应该用规则来完成,但在我看来,它们是不可预测的,在这种情况下,如果你愿意,它们不会给你灵活性来限制你的条件。我要做的是:

    首先在你的模块中的一个XML文件中创建一个新的安全组(不要忘记在__manifest__.py/__openerp__.py中添加文件):

    <record model="res.groups" id="your_group">
        <field name="name">Group of users who cannot create new products</field>
    </record>
    

    然后覆盖product.product ORM create 方法并在里面添加你的条件:

    @api.model
    def create(self, vals):
        if self.env.user.has_group('your_module.your_group'):
            raise Warning(
                _('Sorry, you are not allowed to create new products.'),
            )
        else:
            return super(ProductProduct, self).create(vals)
    

    或者在product.template ORM create 方法中做,这没关系,因为产品通过委托从模板继承。

    如果您希望该组的用户不编写或删除产品,请也继承这些 ORM 方法并为它们添加类似的条件。

    您应该通过界面手动将无法创建产品的用户添加到新组中,或者通过您创建组的 XML(通过参数@987654333)添加他们(甚至整个用户组) @ - 限制特定用户- 或 implied_ids - 限制整个组-)。

    【讨论】:

    • 为什么你认为规则是不可预测的?规则功能实际上非常好,但也非常复杂。
    • @CZoellner 规则对我有意想不到的后果。在这里,您有两个问题,我在两种不同的情况下以奇怪的行为对它们提出了问题,实际上您已经评论了其中一个:stackoverflow.com/questions/48083001/…stackoverflow.com/questions/49013437/…。我仍然不理解他们,也从未找到对他们行为的体面解释(因为从官方文档中到处写的解释是不够的)。
    • 是的,关于该主题的文档真的很短。查看 Olivier Dony 更安全的代码幻灯片 (odoo.com/de_DE/slides/slide/10-rules-for-safer-code-398) 中的规则 #8,这是一个很好的可视化。
    • 那些规则的幻灯片非常清楚@CZoellner。但是,我仍然认为幻灯片中的那些图片并不总是真实的。我之前写给你的链接之一就是一个例子:stackoverflow.com/questions/49013437/…。那里会发生什么?在那种情况下幻灯片不正确,可能是domain_force 破坏了什么?但是制定没有domain_force 的规则是无稽之谈,不是吗?
    • 我已经安装了我开发的自定义模块,然后我按照您的说法将用户添加到组中(问题的照片中提到了),但是当我与该用户联系时我注意到他仍然有权创造新产品
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    相关资源
    最近更新 更多