diff --git a/bt5/erp5_web_shacache/ExtensionTemplateItem/portal_components/extension.erp5.ShaCache.py b/bt5/erp5_web_shacache/ExtensionTemplateItem/portal_components/extension.erp5.ShaCache.py index adf240d0fd5aef16f70a298e8114a6aac0b29e49..a99a749809f2dad78dd9b93344afe390ffbc29cc 100644 --- a/bt5/erp5_web_shacache/ExtensionTemplateItem/portal_components/extension.erp5.ShaCache.py +++ b/bt5/erp5_web_shacache/ExtensionTemplateItem/portal_components/extension.erp5.ShaCache.py @@ -28,6 +28,7 @@ import hashlib, httplib +from Products.ERP5Type.UnrestrictedMethod import super_user def WebSection_getDocumentValue(self, key, portal=None, language=None,\ @@ -105,7 +106,9 @@ def WebSite_viewAsWebPost(self, *args, **kwargs): document = portal.portal_contributions.newContent(file=file, filename='shacache', discover_metadata=False, reference=sha512sum, content_type='application/octet-stream') - document.publish() + with super_user(): + # security check should be done already. + document.publish() self.REQUEST.RESPONSE.setStatus(httplib.CREATED) return sha512sum diff --git a/bt5/erp5_web_shadir/ExtensionTemplateItem/portal_components/extension.erp5.ShaDir.py b/bt5/erp5_web_shadir/ExtensionTemplateItem/portal_components/extension.erp5.ShaDir.py index 2314178f84f304eda2db5f0654feb5c3cab7823b..697abdc97956ece59586f7a40420c648d3eb2dd7 100644 --- a/bt5/erp5_web_shadir/ExtensionTemplateItem/portal_components/extension.erp5.ShaDir.py +++ b/bt5/erp5_web_shadir/ExtensionTemplateItem/portal_components/extension.erp5.ShaDir.py @@ -30,6 +30,7 @@ import hashlib import json import validictory from Products.ERP5Type.Document import newTempFile +from Products.ERP5Type.UnrestrictedMethod import super_user def WebSection_getDocumentValue(self, key, portal=None, language=None,\ @@ -99,7 +100,9 @@ def WebSection_setObject(self, id, ob, **kw): if data_set is None: data_set = portal.data_set_module.newContent(portal_type='Data Set', reference=id) - data_set.publish() + with super_user(): + # security check should be done already. + data_set.publish() reference = hashlib.sha512(data).hexdigest() @@ -109,7 +112,9 @@ def WebSection_setObject(self, id, ob, **kw): ob.setReference(reference) if expiration_date is not None: ob.setExpirationDate(expiration_date) - ob.publish() + with super_user(): + # security check should be done already. + ob.publish() return ob def WebSection_putFactory(self, name, typ, body): diff --git a/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/WebPage_shareDocument.xml b/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/WebPage_shareDocument.xml index fdf6874be65f94a15c7e9fc1b3e693dca53af680..2e26083ea4e2c3ee9593c57508b70b4e76f4a8c9 100644 --- a/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/WebPage_shareDocument.xml +++ b/bt5/erp5_web_ung_theme/SkinTemplateItem/portal_skins/erp5_web_ung_theme/WebPage_shareDocument.xml @@ -65,6 +65,20 @@ return "%s/?key=%s" % (base_url, context.getReference())\n <key> <string>_params</string> </key> <value> <string></string> </value> </item> + <item> + <key> <string>_proxy_roles</string> </key> + <value> + <tuple> + <string>Assignor</string> + </tuple> + </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>WebPage_shareDocument</string> </value> @@ -72,4 +86,23 @@ return "%s/?key=%s" % (base_url, context.getReference())\n </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>Assignor</string> + <string>Auditor</string> + <string>Manager</string> + </tuple> + </value> + </item> + </dictionary> + </pickle> + </record> </ZopeData> diff --git a/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaCacheSecurity.py b/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaCacheSecurity.py index 9ae5ed5d8ebd125a732fed5e23538d6690d956af..14e3f94174cfff1775a2337c2dfcef346a99c512 100644 --- a/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaCacheSecurity.py +++ b/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaCacheSecurity.py @@ -129,18 +129,20 @@ class TestShaCacheSecurity(ShaCacheMixin, ShaSecurityMixin, SecurityTestCase): It also must check if document can be published alive. """ - self.changeUser(self.lucas_user) for module in ('image_module', 'document_module',): module = getattr(self.portal, module) for portal_type in module.getVisibleAllowedContentTypeList(): + self.changeUser(self.lucas_user) document = module.newContent(portal_type=portal_type) document() document.view() + self.login() document.publishAlive() self.tic() + self.changeUser(self.lucas_user) self.assertEqual('Published Alive', document.getValidationStateTitle()) @@ -181,6 +183,7 @@ class TestShaCacheSecurity(ShaCacheMixin, ShaSecurityMixin, SecurityTestCase): self.changeUser(self.toto_user) document = module.newContent(portal_type=portal_type) + self.login() document.publishAlive() self.tic() diff --git a/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaDirSecurity.py b/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaDirSecurity.py index a2336bf72b5249a206e971953e619e0e3f907bfc..3a23390076caf2a1da5bea89c8c6c0340b2f10a6 100644 --- a/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaDirSecurity.py +++ b/bt5/networkcache_erp5/TestTemplateItem/portal_components/test.erp5.testShaDirSecurity.py @@ -120,8 +120,10 @@ class TestShaDirSecurity(ShaDirMixin, ShaSecurityMixin, SecurityTestCase): data_set() data_set.view() + self.login() data_set.publish() self.tic() + self.changeUser(self.lucas_user) self.assertEqual('Published', data_set.getValidationStateTitle()) self.assertUserHaveRoleOnDocument(self.lucas_user, 'Auditor', data_set) @@ -147,6 +149,7 @@ class TestShaDirSecurity(ShaDirMixin, ShaSecurityMixin, SecurityTestCase): data_set = self.portal.data_set_module.newContent( portal_type='Data Set', reference=self.key) + self.login() data_set.publish() self.tic() @@ -167,9 +170,11 @@ class TestShaDirSecurity(ShaDirMixin, ShaSecurityMixin, SecurityTestCase): document() document.view() + self.login() document.publishAlive() self.tic() + self.changeUser(self.lucas_user) self.assertEqual('Published Alive', document.getValidationStateTitle()) self.assertUserHaveRoleOnDocument(self.lucas_user, 'Auditor', document) @@ -191,6 +196,7 @@ class TestShaDirSecurity(ShaDirMixin, ShaSecurityMixin, SecurityTestCase): """ self.changeUser(self.toto_user) document = self.portal.document_module.newContent(portal_type='Text') + self.login() document.publishAlive() self.tic()