From 2bd9af2bf04ecdff84c613269ec960e5b46a5c5e Mon Sep 17 00:00:00 2001
From: Arnaud Fontaine <arnaud.fontaine@nexedi.com>
Date: Tue, 9 Jul 2013 18:00:54 +0900
Subject: [PATCH] ZODB Components: Developer Role was not returned by
 getRoles() for users added through erp5.acl_users.

It was only working if the user was only in Zope acl_users but not ERP5
acl_users because getRole() was not monkey-patch in contrary to AccessControl
BasicUser.

TODO: Add unit test before merge.
---
 product/ERP5Type/patches/PropertiedUser.py | 23 ++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/product/ERP5Type/patches/PropertiedUser.py b/product/ERP5Type/patches/PropertiedUser.py
index 5a09a752b0..54be6953a9 100644
--- a/product/ERP5Type/patches/PropertiedUser.py
+++ b/product/ERP5Type/patches/PropertiedUser.py
@@ -90,6 +90,28 @@ def getRolesInContext( self, object ):
 
 from App.config import getConfiguration
 
+def getRoles( self ):
+    """ -> [ role ]
+
+    o Include only "global" roles.
+    """
+    role_tuple = self._roles.keys()
+    if role_tuple:
+        product_config = getattr(getConfiguration(), 'product_config', None)
+        if product_config:
+            config = product_config.get('erp5')
+            if config:
+                role_set = set(role_tuple)
+                user_id = self.getId()
+                if config and user_id in config.developer_list:
+                    role_set.add('Developer')
+                elif user_id in role_set:
+                    role_set.remove('Developer')
+
+                return role_set
+
+    return role_tuple
+
 def allowed(self, object, object_roles=None ):
 
     """ Check whether the user has access to object.
@@ -205,3 +227,4 @@ def allowed(self, object, object_roles=None ):
 if PropertiedUser is not None:
   PropertiedUser.getRolesInContext = getRolesInContext
   PropertiedUser.allowed = allowed
+  PropertiedUser.getRoles = getRoles
-- 
2.30.9