From cd9931467058689b282ce3faa586ba1580971c6a Mon Sep 17 00:00:00 2001 From: Vincent Pelletier <vincent@nexedi.com> Date: Tue, 8 Jul 2014 17:07:13 +0200 Subject: [PATCH] erp5_administration: Add script to cleanup roles_and_users mappings. Cleans up both the table and it persistent symmetric using current catalog data. --- .../extension.erp5.ERP5Administration.py | 15 ++- .../Base_cleanupRolesAndUsersTable.xml | 95 +++++++++++++++++++ .../Base_filterSecurityUidDict.xml | 28 ++++++ .../z_delete_from_roles_and_users.xml | 36 +++++++ .../z_get_referenced_security_uid_set.xml | 87 +++++++++++++++++ bt5/erp5_administration/bt/revision | 2 +- 6 files changed, 261 insertions(+), 2 deletions(-) create mode 100644 bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_cleanupRolesAndUsersTable.xml create mode 100644 bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_filterSecurityUidDict.xml create mode 100644 bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_delete_from_roles_and_users.xml create mode 100644 bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_get_referenced_security_uid_set.xml diff --git a/bt5/erp5_administration/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Administration.py b/bt5/erp5_administration/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Administration.py index e1ef14a774..1fe2860290 100644 --- a/bt5/erp5_administration/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Administration.py +++ b/bt5/erp5_administration/ExtensionTemplateItem/portal_components/extension.erp5.ERP5Administration.py @@ -180,4 +180,17 @@ def checkPythonSourceCodeAsJSON(self, data): message_dict['type'] = 'warning' self.REQUEST.RESPONSE.setHeader('content-type', 'application/json') - return json.dumps(dict(annotations=message_list)) \ No newline at end of file + return json.dumps(dict(annotations=message_list)) + +def filterSecurityUidDict(security_uid_dict, referenced_security_uid_set): + """ + Removes from security_uid_dict entries whose value is not present in referenced_security_uid_set. + Returns the list of uids dropped. + """ + result = [] + append = result.append + for key, value in list(security_uid_dict.items()): + if value not in referenced_security_uid_set: + append(value) + del security_uid_dict[key] + return result \ No newline at end of file diff --git a/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_cleanupRolesAndUsersTable.xml b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_cleanupRolesAndUsersTable.xml new file mode 100644 index 0000000000..541bc58278 --- /dev/null +++ b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_cleanupRolesAndUsersTable.xml @@ -0,0 +1,95 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>Script_magic</string> </key> + <value> <int>3</int> </value> + </item> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_container</string> </key> + <value> <string>container</string> </value> + </item> + <item> + <key> <string>name_context</string> </key> + <value> <string>context</string> </value> + </item> + <item> + <key> <string>name_m_self</string> </key> + <value> <string>script</string> </value> + </item> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>_body</string> </key> + <value> <string>context.z_delete_from_roles_and_users(\n + uid=context.Base_filterSecurityUidDict(\n + context.getPortalObject().portal_catalog.getSQLCatalog(catalog_id).security_uid_dict,\n + {x.security_uid for x in context.z_get_referenced_security_uid_set()},\n + ),\n +)\n +</string> </value> + </item> + <item> + <key> <string>_params</string> </key> + <value> <string>catalog_id=None</string> </value> + </item> + <item> + <key> <string>guard</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>Base_cleanupRolesAndUsersTable</string> </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="Guard" module="Products.DCWorkflow.Guard"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>roles</string> </key> + <value> + <tuple> + <string>Manager</string> + </tuple> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_filterSecurityUidDict.xml b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_filterSecurityUidDict.xml new file mode 100644 index 0000000000..89629ea91f --- /dev/null +++ b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/Base_filterSecurityUidDict.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_function</string> </key> + <value> <string>filterSecurityUidDict</string> </value> + </item> + <item> + <key> <string>_module</string> </key> + <value> <string>ERP5Administration</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>Base_filterSecurityUidDict</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_delete_from_roles_and_users.xml b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_delete_from_roles_and_users.xml new file mode 100644 index 0000000000..b92f56dbfd --- /dev/null +++ b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_delete_from_roles_and_users.xml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="SQL" module="Products.ZSQLMethods.SQL"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>arguments_src</string> </key> + <value> <string>uid</string> </value> + </item> + <item> + <key> <string>connection_id</string> </key> + <value> <string>erp5_sql_connection</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>z_delete_from_roles_and_users</string> </value> + </item> + <item> + <key> <string>src</string> </key> + <value> <string encoding="cdata"><![CDATA[ + +delete from roles_and_users where <dtml-sqltest uid type=int op=eq multiple> + +]]></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_get_referenced_security_uid_set.xml b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_get_referenced_security_uid_set.xml new file mode 100644 index 0000000000..d4c675e084 --- /dev/null +++ b/bt5/erp5_administration/SkinTemplateItem/portal_skins/erp5_administration/z_get_referenced_security_uid_set.xml @@ -0,0 +1,87 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="SQL" module="Products.ZSQLMethods.SQL"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_col</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>name</string> </key> + <value> <string>security_uid</string> </value> + </item> + <item> + <key> <string>null</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>type</string> </key> + <value> <string>i</string> </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>4</int> </value> + </item> + </dictionary> + </list> + </value> + </item> + <item> + <key> <string>allow_simple_one_argument_traversal</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>arguments_src</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>cache_time_</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>class_file_</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>class_name_</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>connection_hook</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>connection_id</string> </key> + <value> <string>erp5_sql_connection</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>z_get_referenced_security_uid_set</string> </value> + </item> + <item> + <key> <string>max_cache_</string> </key> + <value> <int>100</int> </value> + </item> + <item> + <key> <string>max_rows_</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>src</string> </key> + <value> <string>select distinct security_uid from catalog</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_administration/bt/revision b/bt5/erp5_administration/bt/revision index 9e42f3ef01..09df927592 100644 --- a/bt5/erp5_administration/bt/revision +++ b/bt5/erp5_administration/bt/revision @@ -1 +1 @@ -165 +166 \ No newline at end of file -- 2.30.9