Advanced view for security management & removed parent_id on ir.model

bzr revid: jean-baptiste.aubort@camptocamp.com-20080718155312-8z9elapi9w5xldm4
This commit is contained in:
Aubort Jean-Baptiste 2008-07-18 17:53:12 +02:00
parent ad4721acb0
commit bbaa945575
3 changed files with 516 additions and 285 deletions

View File

@ -48,181 +48,361 @@
<!--
Tree
-->
<record id="base.model_ir_act_report_custom" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_report_xml" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<!--<record id="base.model_ir_act_report_custom" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_report_xml" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_sequence_type" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_report_custom" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_report_xml" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_wizard" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_url" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_server" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_window" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_act_window_view" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.actions.act_window')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_model_view" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.model')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_model_fields" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.model')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_model_access" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.model')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_model_data" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.model')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_exports_line" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.exports')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_module_category" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_module_module_configuration_step" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_module_module_configuration_wizard" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_module_module_dependency" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_module_repository" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_report_custom_fields" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.report.custom')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_rule_group" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.rule')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_ir_ui_view_sc" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'ir.ui.view')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_address" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_bank" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_bank_type" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner.bank')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_bank_type_field" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner.bank.type')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_canal" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_category" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_event" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_event_type" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner.event')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_function" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_som" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_partner_title" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.partner')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_request_history" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.request')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_request_link" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.request')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_wizard_ir_model_menu_create_line" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'wizard.ir.model.menu.create')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_wkf_activity" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'workflow')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_wkf_instance" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'workflow')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_wkf_transition" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'workflow')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_wkf_triggers" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'workflow')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_wkf_workitem" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'workflow')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_country_state" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.country')]"/>-->
<!--</record>-->
<!---->
<!--<record id="base.model_res_currency_rate" model="ir.model">-->
<!-- <field name="parent_id" search="[('model', '=', 'res.currency')]"/>-->
<!--</record>-->
<record id="base.model_ir_sequence_type" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_report_custom" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_report_xml" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_wizard" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_url" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_server" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_window" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.actions')]"/>
</record>
<record id="base.model_ir_act_window_view" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.actions.act_window')]"/>
</record>
<record id="base.model_ir_model_tree" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.model')]"/>
</record>
<record id="base.model_ir_model_fields" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.model')]"/>
</record>
<record id="base.model_ir_model_access" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.model')]"/>
</record>
<record id="base.model_ir_model_data" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.model')]"/>
</record>
<record id="base.model_ir_exports_line" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.exports')]"/>
</record>
<record id="base.model_ir_module_category" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>
</record>
<record id="base.model_ir_module_module_configuration_step" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>
</record>
<record id="base.model_ir_module_module_configuration_wizard" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>
</record>
<record id="base.model_ir_module_module_dependency" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>
</record>
<record id="base.model_ir_module_repository" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.module.module')]"/>
</record>
<record id="base.model_ir_report_custom_fields" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.report.custom')]"/>
</record>
<record id="base.model_ir_rule_group" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.rule')]"/>
</record>
<record id="base.model_ir_ui_view_sc" model="ir.model">
<field name="parent_id" search="[('model', '=', 'ir.ui.view')]"/>
</record>
<record id="base.model_res_partner_address" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_partner_bank" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_partner_bank_type" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner.bank')]"/>
</record>
<record id="base.model_res_partner_bank_type_field" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner.bank.type')]"/>
</record>
<record id="base.model_res_partner_canal" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_partner_category" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_partner_event" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_partner_event_type" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner.event')]"/>
</record>
<record id="base.model_res_partner_function" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_partner_som" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_partner_title" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.partner')]"/>
</record>
<record id="base.model_res_request_history" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.request')]"/>
</record>
<record id="base.model_res_request_link" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.request')]"/>
</record>
<record id="base.model_wizard_ir_model_menu_create_line" model="ir.model">
<field name="parent_id" search="[('model', '=', 'wizard.ir.model.menu.create')]"/>
</record>
<record id="base.model_wkf_activity" model="ir.model">
<field name="parent_id" search="[('model', '=', 'workflow')]"/>
</record>
<record id="base.model_wkf_instance" model="ir.model">
<field name="parent_id" search="[('model', '=', 'workflow')]"/>
</record>
<record id="base.model_wkf_transition" model="ir.model">
<field name="parent_id" search="[('model', '=', 'workflow')]"/>
</record>
<record id="base.model_wkf_triggers" model="ir.model">
<field name="parent_id" search="[('model', '=', 'workflow')]"/>
</record>
<record id="base.model_wkf_workitem" model="ir.model">
<field name="parent_id" search="[('model', '=', 'workflow')]"/>
</record>
<record id="base.model_res_country_state" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.country')]"/>
</record>
<record id="base.model_res_currency_rate" model="ir.model">
<field name="parent_id" search="[('model', '=', 'res.currency')]"/>
</record>
<!-- <record id="base.model_ir_act_report_custom" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_report_xml" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!-- -->
<!-- <record id="base.model_ir_sequence_type" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_report_custom" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_report_xml" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_wizard" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_url" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_server" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_window" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_actions"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_act_window_view" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_actions_act_window"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_model_view" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_model"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_model_fields" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_model"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_model_access" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_model"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_model_data" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_model"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_exports_line" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_exports"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_module_category" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_module_module"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_module_module_configuration_step" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_module_module"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_module_module_configuration_wizard" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_module_module"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_module_module_dependency" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_module_module"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_module_repository" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_module_module"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_report_custom_fields" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_report_custom"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_rule_group" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_rule"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_ir_ui_view_sc" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_ir_ui_view"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_address" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_bank" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_bank_type" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner_bank"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_bank_type_field" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner_bank_type"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_canal" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_category" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_event" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_event_type" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner_event"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_function" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_som" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_partner_title" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_partner"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_request_history" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_request"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_request_link" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_request"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_wizard_ir_model_menu_create_line" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_wizard_ir_model_menu_create"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_wkf_activity" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_workflow"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_wkf_instance" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_workflow"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_wkf_transition" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_workflow"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_wkf_triggers" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_workflow"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_wkf_workitem" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_workflow"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_country_state" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_country"/>-->
<!-- </record>-->
<!---->
<!-- <record id="base.model_res_currency_rate" model="ir.model">-->
<!-- <field name="parent_id" ref="base.model_res_currency"/>-->
<!-- </record>-->
<!--
Access

View File

@ -620,7 +620,6 @@
<page string="Object">
<field name="name" select="1"/>
<field name="model" select="1"/>
<field name="parent_id" select="1"/>
<separator colspan="4" string="Fields"/>
<field colspan="4" context="{'manual':True}" name="field_id" nolabel="1">
<tree string="Fields Description">
@ -673,7 +672,6 @@
<tree string="Model Description">
<field name="name"/>
<field name="model"/>
<field name="parent_id"/>
</tree>
</field>
</record>
@ -1032,59 +1030,26 @@
</record>
<!--
===============
Object Access
===============
================
Object Security
================
-->
<record id="view_model_form1" model="ir.ui.view">
<field name="name">ir.model.form1</field>
<field name="model">ir.model</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Model Description">
<field name="name" select="1"/>
<field name="model" select="1"/>
<field name="parent_id" select="1"/>
</form>
</field>
</record>
<record id="view_model_tree1" model="ir.ui.view">
<field name="name">ir.model.tree1</field>
<record id="view_model_tree" model="ir.ui.view">
<field name="name">Objects Security Tree</field>
<field name="model">ir.model</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Model Description">
<field name="name"/>
<field name="model"/>
<field name="parent_id"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_model_sec">
<field name="name">Objects</field>
<record model="ir.actions.act_window" id="action_model_view_security">
<field name="name">Objects Security</field>
<field name="res_model">ir.model</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
<field name="view_id" eval="False"/>
<field name="view_id" ref="view_model_tree"/>
<field name="context">{'advanced':True}</field>
</record>
<record model="ir.actions.act_window.view" id="action_model_sec_tree">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_model_tree1"/>
<field name="act_window_id" ref="action_model_sec" />
</record>
<record model="ir.actions.act_window.view" id="action_model_sec_form">
<field name="sequence" eval="2"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_model_form1"/>
<field name="act_window_id" ref="action_model_sec" />
</record>
<menuitem action="action_model_sec" id="ir_model_model_menu1" parent="base.menu_security"/>
<menuitem action="action_model_view_security" id="ir_model_model_menu69" parent="base.menu_security"/>
</data>
</terp>

View File

@ -36,10 +36,21 @@ import time
import tools
import pooler
from pprint import pprint #FIXME: Dev
def _get_fields_type(self, cr, uid, context=None):
cr.execute('select distinct ttype,ttype from ir_model_fields')
return cr.fetchall()
class ir_model_type(osv.osv):
_name = 'ir.model.type'
_columns = {
'name': fields.char('Name', size=64, required=True),
#'model_id': fields.many2one('ir.model', 'Models'),
}
ir_model_type()
class ir_model(osv.osv):
_name = 'ir.model'
_description = "Objects"
@ -49,7 +60,8 @@ class ir_model(osv.osv):
'model': fields.char('Object Name', size=64, required=True, search=1),
'info': fields.text('Information'),
'field_id': fields.one2many('ir.model.fields', 'model_id', 'Fields', required=True),
'parent_id': fields.many2one('ir.model', 'Parent id'),
#'type_id': fields.one2many('ir.model.type', 'model_id', 'Type'),
#'type_id': fields.many2many('ir.model.type', 'ir_model_type_rel', 'model_id', 'type_id', 'Types'),
'state': fields.selection([('manual','Custom Object'),('base','Base Field')],'Manualy Created',readonly=1),
}
_defaults = {
@ -57,6 +69,11 @@ class ir_model(osv.osv):
'state': lambda self,cr,uid,ctx={}: (ctx and ctx.get('manual',False)) and 'manual' or 'base',
}
#FIXME: We'll be back soon
#_constraints = [
# (_check_model_name, 'The model name must start with x_ and not contain any special character !', ['model']),
#]
def _check_model_name(self, cr, uid, ids):
for model in self.browse(cr, uid, ids):
if model.state=='manual':
@ -65,27 +82,6 @@ class ir_model(osv.osv):
if not re.match('^[a-z_A-Z0-9]+$',model.model):
return False
return True
# FIXME: What it was for ?
#_constraints = [
# (_check_model_name, 'The model name must start with x_ and not contain any special character !', ['model']),
#]
def unlink(self, cr, user, ids, context=None):
for model in self.browse(cr, user, ids, context):
if model.state <> 'manual':
raise except_orm(_('Error'), _("You can not remove the model '%s' !") %(field.name,))
res = super(ir_model, self).unlink(cr, user, ids, context)
pooler.restart_pool(cr.dbname)
return res
def create(self, cr, user, vals, context=None):
if context and context.get('manual',False):
vals['state']='manual'
res = super(ir_model,self).create(cr, user, vals, context)
if vals.get('state','base')=='manual':
pooler.restart_pool(cr.dbname)
return res
def instanciate(self, cr, user, model, context={}):
class x_custom_model(osv.osv):
@ -97,16 +93,129 @@ class ir_model(osv.osv):
x_custom_model._rec_name = 'x_name'
else:
x_custom_model._rec_name = x_custom_model._columns.keys()[0]
ir_model()
def unlink(self, cr, user, ids, context=None):
#TODO Advanced
for model in self.browse(cr, user, ids, context):
if model.state <> 'manual':
raise except_orm(_('Error'), _("You can not remove the model '%s' !") %(field.name,))
res = super(ir_model, self).unlink(cr, user, ids, context)
pooler.restart_pool(cr.dbname)
return res
class ir_model_tree(osv.osv):
_name = 'ir.model.tree'
_description = "Objects Tree"
_columns = {
'model_id': fields.many2one('ir.model', 'Model id', required=True),
'parent_id': fields.many2one('ir.model', 'Parent id', required=True),
}
ir_model_tree()
def create(self, cr, user, vals, context=None):
#TODO Advanced
if context and context.get('manual',False):
vals['state']='manual'
res = super(ir_model,self).create(cr, user, vals, context)
if vals.get('state','base')=='manual':
pooler.restart_pool(cr.dbname)
return res
def read(self, cr, user, ids, fields=None, context=None, load='_classic_read'):
result = super(osv.osv, self).read(cr, user, ids, fields, context, load)
if 'advanced' in context:
for res in result:
rules = self.pool.get('ir.model.access').search(cr, user, [('model_id', '=', res['id'])])
rules_br = self.pool.get('ir.model.access').browse(cr, user, rules)
for rule in rules_br:
perm_list = []
if rule.perm_read:
perm_list.append('r')
if rule.perm_write:
perm_list.append('w')
if rule.perm_create:
perm_list.append('c')
if rule.perm_unlink:
perm_list.append('u')
perms = ",".join(perm_list)
res['group_%i'%rule.group_id.id] = perms
return result
def write(self, cr, user, ids, vals, context=None):
if 'advanced' in context:
perms_rel = ['create','read','unlink','write']
perms_all = ['c','r','u','w']
perms = []
vals_new = vals.copy()
for val in vals:
if val[:6]=='group_':
#Values
group_id = int(val[6:])
model_id = ids[0]
if isinstance(vals[val], basestring):
perms = list(set(vals[val].split(",")))
#Syntax check
for perm in perms:
if perm not in perms_all:
model_name = self.pool.get('ir.model').browse(cr, user, [model_id])[0].model
group_name = self.pool.get('res.groups').browse(cr, user, [group_id])[0].name
raise osv.except_osv('Error !', 'There is an invalid rule in "%s" for "Group %s". Valid rules are:\r\tc=create\r\tr=read\r\tu=unlink\r\tw=write\rYou must separate them by a coma, example: r,w'%(model_name, group_name))
#Assign rights
req = {}
for i,perm in enumerate(perms_all):
#if perm in perms:
# req['perm_%s'%perms_rel[i]] = True
#else:
# req['perm_%s'%perms_rel[i]] = False
req['perm_%s'%perms_rel[i]] = perm in perms and 'True' or 'False'
#Apply rule
sql = ''
rules = self.pool.get('ir.model.access').search(cr, user, [('model_id', '=', model_id),('group_id', '=', group_id)])
if rules:
for k in req:
sql += '%s=%s,'%(k,req[k])
cr.execute("update ir_model_access set %s where id=%i"%(sql[:-1], rules[0]))
else:
model_name = self.pool.get('ir.model').browse(cr, user, [model_id])[0].name
group_name = self.pool.get('res.groups').browse(cr, user, [group_id])[0].name
rule_name = '%s %s'%(model_name,group_name)
cr.execute('insert into ir_model_access \
(name, model_id, group_id, perm_create, perm_read, perm_unlink, perm_write) \
values (%s, %i, %i, %s, %s, %s, %s)',
(rule_name, model_id, group_id,req['perm_create'], req['perm_read'], req['perm_unlink'], req['perm_write'],))
vals_new.pop(val)
return super(osv.osv, self).write(cr, user, ids, vals_new, context)
def fields_get(self, cr, user, fields=None, context=None, read_access=True):
result = super(osv.osv, self).fields_get(cr, user, fields, context)
if 'advanced' in context:
groups = self.pool.get('res.groups').search(cr, user, [])
groups_br = self.pool.get('res.groups').browse(cr, user, groups)
for group in groups_br:
result['group_%i'%group.id] = {'string': 'Group %s'%group.name,'type': 'char','size': 7}
return result
def on_change_write(self, cr, user, ids, vals, context=None):
print 'prout'
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context={}, toolbar=False):
result = super(osv.osv, self).fields_view_get(cr, uid, view_id,view_type,context)
if view_type=='tree' and 'advanced' in context:
groups = self.pool.get('res.groups').search(cr, uid, [])
groups_br = self.pool.get('res.groups').browse(cr, uid, groups)
#state = ''
#TODO: qqch du genre si un object n'a pas de secu
#for field in journal.view_id.columns_id:
# if field.field=='state':
# state = ' colors="red:state==\'draft\'"'
cols = ['model']
xml = '''<?xml version="1.0"?><tree editable="top"><field name="model" readonly="1"/>'''
for group in groups_br:
#xml += '''<field name="group_%i" sum="%s" on_change="on_change_write()"/>''' % (group.id, group.name) #TODO: on_change
xml += '''<field name="group_%i" sum="%s"/>''' % (group.id, group.name)
xml += '''</tree>'''
result['arch'] = xml
result['fields'] = self.fields_get(cr, uid, cols, context)
return result
ir_model()
class ir_model_fields(osv.osv):
_name = 'ir.model.fields'
@ -159,7 +268,6 @@ class ir_model_fields(osv.osv):
vals['model']=model_data['model']
if context and context.get('manual',False):
vals['state']='manual'
print vals['name']
res = super(ir_model_fields,self).create(cr, user, vals, context)
if vals.get('state','base')=='manual':
if not vals['name'].startswith('x_'):
@ -186,7 +294,7 @@ class ir_model_access(osv.osv):
res = False
grouparr = group.split('.')
if grouparr:
cr.execute("select * from res_groups_users_rel where uid=" + str(uid) + " and gid in(select res_id from ir_model_data where module='%s' and name='%s')" % (grouparr[0], grouparr[1]))
cr.execute("select * from res_groups_users_rel where uid=" + str(uid) + " and gid in(select res_id from ir_model_data where module='%s' and name='%s')", (grouparr[0], grouparr[1],))
r = cr.fetchall()
if not r:
res = False
@ -196,44 +304,22 @@ class ir_model_access(osv.osv):
res = False
return res
def check_tree(self, cr, uid, model_name, mode):
cr.execute('SELECT MAX(CASE WHEN perm_'+mode+' THEN 1 else 0 END) '
'from ir_model_access a join ir_model m on (m.id=a.model_id) '
'join res_groups_users_rel gu on (gu.gid = a.group_id) '
'where m.model = %s and gu.uid = %s', (model_name, uid,))
res = cr.fetchall()[0][0]
if res==None:
cr.execute('select model from ir_model where id=(select parent_id from ir_model where model=%s)', (model_name,))
parent_name = cr.fetchall()
if len(parent_name)>0:
res = self.check_tree(cr, uid, parent_name[0][0], mode) # Recursiv until there is no parent
print '\tcheck %s = %s' % (parent_name[0][0], str(res))
return res
def check(self, cr, uid, model_name, mode='read',raise_exception=True):
def check(self, cr, uid, model_name, mode='read',raise_exception=True):
assert mode in ['read','write','create','unlink'], 'Invalid access mode for security'
# We first check if a specific rule exists
cr.execute('SELECT MAX(CASE WHEN perm_'+mode+' THEN 1 else 0 END) '
'FROM ir_model_access a '
'JOIN ir_model m ON (a.model_id=m.id) '
'JOIN res_groups_users_rel gu ON (gu.gid = a.group_id) '
'WHERE m.model = %s AND gu.uid = %s', (model_name, uid,))
r = cr.fetchall()
print '%s in %s = %s by %i'%(mode, model_name, str(r[0][0]), uid) # FIXME: REMOVE PLEASE
# Users root and admin have all access (Todo: exclude xml-rpc requests)
if uid==1 or uid==2:
return True
# Recursivly check parent if present
if r[0][0] == None:
res = self.check_tree(cr, uid, model_name, mode)
else:
res = r[0][0]
# We check if a specific rule exists
cr.execute('SELECT MAX(CASE WHEN perm_'+mode+' THEN 1 else 0 END) '
'from ir_model_access a join ir_model m on (m.id=a.model_id) '
'join res_groups_users_rel gu on (gu.gid = a.group_id) '
'where m.model = %s and gu.uid = %s', (model_name, uid,))
r = cr.fetchall()
if not res:
print '%s in %s = %s by %i'%(mode, model_name, str(r[0][0]), uid) # FIXME: REMOVE PLEASE
if not r[0][0]:
if raise_exception:
msgs = {
'read': _('You can not read this document! (%s)'),
@ -242,7 +328,7 @@ class ir_model_access(osv.osv):
'unlink': _('You can not delete this document! (%s)'),
}
raise except_orm(_('AccessError'), msgs[mode] % model_name )
return res
return r[0][0]
check = tools.cache()(check)