web-dev-qa-db-ja.com

グループとステータスに基づいてフィールドを読み取り専用にする方法は?

グループとステータスに基づいてフィールドの準備をしたい。

私が2つのグループを持っているように1.マネージャーグループ2.ユーザーグループ

ser Groupを任意のser thenおよびStatus Doneに指定すると、フィールドはこのユーザーに対して読み取り専用になります。

明確に理解できることを願っています

感謝

15
user1576199

ブール型の関数フィールドを作成します。ログインしたユーザーがユーザーグループの下にあり、状態が完了している場合は、trueを返します。次に、ビューでattrs="{'readonly':[('boolean_field_name','=',True)]}"を指定します

OR

まず、フォームビューを作成します。次に、ビューを継承し、グループも指定します。たとえば、販売注文フォームビューで、状態がドラフトまたは送信されていない場合に、グループユーザーの顧客参照フィールドを読み取り専用にします。

<record id="view_order_form_cust_ref_readonly" model="ir.ui.view">
    <field name="name">sale.order.form.readonly.cust</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="groups_id" eval="[(6, 0, [ref('base.group_user') ])]"/>
    <field name="Arch" type="xml">
        <field name='client_order_ref'" position="attributes">
            <attribute name="attrs">{'readonly':[('state','not in',['draft','sent'])]}</attribute>
        </field>
    </field>
</record>
29
OmaL

pyのように、OpenERPのフィールドレベルでアクセスルールを適用できます

'name': fields.char('Name', size=128, required=True, select=True,
 read=['base.group_user'] ),

そしてxmlのステータスについて:

<field name="name " attrs="{'readonly': [('state','=','done')]}"/>
4
Heroic

これを達成するための別の甘い方法があります。 1つの機能フィールドを作成し、そのユーザーに割り当てられたグループをチェックし、そのフィールドを保存しません。ビューでは、attrsでそのフィールドを使用します。

製品で、ユーザーに変更を許可したくない場合を考えてみましょう内部参照ユーザーが製品変更グループに属していない場合。

1つのグループを作成します。

<data noupdate="1" >
    <record model="res.groups" id="group_product_modify">
        <field name="name">Product Modify</field>
        <field name="users" eval="[(4, ref('base.user_root'))]"/> 
    </record>
</data>     

Pythonファイル

class product_template(models.Model):
    _inherit="product.template"

    @api.one
    def set_access_for_product(self):
        self.able_to_modify_product = self.env['res.users'].has_group('product_extended_ecom_ept.group_product_modify')

    able_to_modify_product = fields.Boolean(compute=set_access_for_product, string='Is user able to modify product?')

XMlファイルは次のようになります。

<record model="ir.ui.view" id="product_template_update_internal_code_ept">
            <field name="name">Product Template extension</field>
            <field name="inherit_id" ref="product.product_template_only_form_view"/>
            <field name="model">product.template</field>
            <field name="priority" eval="50" />
            <field name="Arch" type="xml">
                <field name="default_code" position="before">
                    <field name="able_to_modify_product" invisible="1" />
                </field>
                <field name="default_code" position="attributes">
                    <attribute name="attrs">{'readonly' : [('able_to_modify_product','=',False)]}</attribute>
                </field>
            </field>
        </record>   

コードの代わりにOdooWebクライアント(GUI)を使用している場合は、少し変わった方法があります。元のフィールドと同じ値を含むフィールドのコピーを作成し(元のフィールド名をRelated Fieldの下のAdvanced Propertiesに指定)、読み取り専用としてマークします。

enter image description here 次に、元のフィールドを編集できないユーザーから非表示にし、グループ属性を使用して編集できるユーザーからコピーフィールドを非表示にすることができます。

enter image description here

0
Sankalp Kataria