diff --git a/addons/base_gengo/wizard/base_gengo_translations.py b/addons/base_gengo/wizard/base_gengo_translations.py
index 6c6ce1e6b42..4ef13eb7b46 100644
--- a/addons/base_gengo/wizard/base_gengo_translations.py
+++ b/addons/base_gengo/wizard/base_gengo_translations.py
@@ -57,7 +57,7 @@ class base_gengo_translations(osv.osv_memory):
def init(self, cr):
icp = self.pool['ir.config_parameter']
if not icp.get_param(cr, SUPERUSER_ID, self.GENGO_KEY, default=None):
- icp.set_param(cr, SUPERUSER_ID, self.GENGO_KEY, str(uuid.uuid4()))
+ icp.set_param(cr, SUPERUSER_ID, self.GENGO_KEY, str(uuid.uuid4()), groups=['base.group_website_designer', 'base.group_website_publisher'])
def get_gengo_key(self, cr):
icp = self.pool['ir.config_parameter']
diff --git a/addons/google_account/google_account.py b/addons/google_account/google_account.py
index 7ffa4f95f48..4968925bd29 100644
--- a/addons/google_account/google_account.py
+++ b/addons/google_account/google_account.py
@@ -174,10 +174,10 @@ class google_service(osv.osv_memory):
return self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://www.openerp.com?NoBaseUrl', context=context)
def get_client_id(self, cr, uid, service, context=None):
- return self.pool.get('ir.config_parameter').get_param(cr, uid, 'google_%s_client_id' % (service,), default=False, context=context)
+ return self.pool.get('ir.config_parameter').get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % (service,), default=False, context=context)
def get_client_secret(self, cr, uid, service, context=None):
- return self.pool.get('ir.config_parameter').get_param(cr, uid, 'google_%s_client_secret' % (service,), default=False, context=context)
+ return self.pool.get('ir.config_parameter').get_param(cr, SUPERUSER_ID, 'google_%s_client_secret' % (service,), default=False, context=context)
def get_uri_oauth(self, a=''): # a = optional action
return "https://accounts.google.com/o/oauth2/%s" % (a,)
diff --git a/addons/google_calendar/res_config.py b/addons/google_calendar/res_config.py
index 78b2a4b6803..ec0f2e4d95b 100644
--- a/addons/google_calendar/res_config.py
+++ b/addons/google_calendar/res_config.py
@@ -13,8 +13,8 @@ class calendar_config_settings(osv.TransientModel):
def set_calset(self,cr,uid,ids,context=None) :
params = self.pool['ir.config_parameter']
myself = self.browse(cr,uid,ids[0],context=context)
- params.set_param(cr, uid, 'google_calendar_client_id', myself.cal_client_id or '', context=None)
- params.set_param(cr, uid, 'google_calendar_client_secret', myself.cal_client_secret or '', context=None)
+ params.set_param(cr, uid, 'google_calendar_client_id', myself.cal_client_id or '', groups=['base.group_system'], context=None)
+ params.set_param(cr, uid, 'google_calendar_client_secret', myself.cal_client_secret or '', groups=['base.group_system'], context=None)
def get_default_all(self,cr,uid,ids,context=None):
diff --git a/addons/google_drive/google_drive.py b/addons/google_drive/google_drive.py
index a6ca39d9982..cd8fc486a89 100644
--- a/addons/google_drive/google_drive.py
+++ b/addons/google_drive/google_drive.py
@@ -240,7 +240,7 @@ class base_config_settings(osv.TransientModel):
}
_defaults = {
'google_drive_uri': lambda s, cr, uid, c: s.pool['google.service']._get_google_token_uri(cr, uid, 'drive', scope=s.pool['google.drive.config'].get_google_scope(), context=c),
- 'google_drive_authorization_code': lambda s, cr, uid, c: s.pool['ir.config_parameter'].get_param(cr, uid, 'google_drive_authorization_code', context=c),
+ 'google_drive_authorization_code': lambda s, cr, uid, c: s.pool['ir.config_parameter'].get_param(cr, SUPERUSER_ID, 'google_drive_authorization_code', context=c),
}
def set_google_authorization_code(self, cr, uid, ids, context=None):
@@ -249,5 +249,5 @@ class base_config_settings(osv.TransientModel):
auth_code = config.google_drive_authorization_code
if auth_code and auth_code != ir_config_param.get_param(cr, uid, 'google_drive_authorization_code', context=context):
refresh_token = self.pool['google.service'].generate_refresh_token(cr, uid, 'drive', config.google_drive_authorization_code, context=context)
- ir_config_param.set_param(cr, uid, 'google_drive_authorization_code', auth_code)
- ir_config_param.set_param(cr, uid, 'google_drive_refresh_token', refresh_token)
+ ir_config_param.set_param(cr, uid, 'google_drive_authorization_code', auth_code, groups=['base.group_system'])
+ ir_config_param.set_param(cr, uid, 'google_drive_refresh_token', refresh_token, groups=['base.group_system'])
diff --git a/addons/google_drive/google_drive_data.xml b/addons/google_drive/google_drive_data.xml
index b1f9883c149..f3f916b201b 100644
--- a/addons/google_drive/google_drive_data.xml
+++ b/addons/google_drive/google_drive_data.xml
@@ -5,11 +5,13 @@
google_drive_client_id
598905559630.apps.googleusercontent.com
+
google_drive_client_secret
vTmou73c-njP-1qCxm7qx7QE
+
diff --git a/addons/mail/update.py b/addons/mail/update.py
index 6969b1479b1..d2873f3a5bf 100644
--- a/addons/mail/update.py
+++ b/addons/mail/update.py
@@ -29,7 +29,7 @@ def get_sys_logs(self, cr, uid):
pool = openerp.registry(cr.dbname)
dbuuid = pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
- db_create_date = pool.get('ir.config_parameter').get_param(cr, uid, 'database.create_date')
+ db_create_date = pool.get('ir.config_parameter').get_param(cr, SUPERUSER_ID, 'database.create_date')
limit_date = datetime.datetime.now()
limit_date = limit_date - datetime.timedelta(15)
limit_date_str = limit_date.strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT)
diff --git a/addons/web_linkedin/web_linkedin.py b/addons/web_linkedin/web_linkedin.py
index 09c40076ea0..aa365bced69 100644
--- a/addons/web_linkedin/web_linkedin.py
+++ b/addons/web_linkedin/web_linkedin.py
@@ -52,7 +52,7 @@ class web_linkedin_settings(osv.osv_memory):
def set_linkedin(self, cr, uid, ids, context=None):
key = self.browse(cr, uid, ids[0], context)["api_key"] or ""
- self.pool.get("ir.config_parameter").set_param(cr, uid, "web.linkedin.apikey", key)
+ self.pool.get("ir.config_parameter").set_param(cr, uid, "web.linkedin.apikey", key, groups=['base.group_users'])
class web_linkedin_fields(osv.Model):
_inherit = 'res.partner'
diff --git a/openerp/addons/base/ir/ir_config_parameter.py b/openerp/addons/base/ir/ir_config_parameter.py
index 9336cbfdd5e..f9c5c7736df 100644
--- a/openerp/addons/base/ir/ir_config_parameter.py
+++ b/openerp/addons/base/ir/ir_config_parameter.py
@@ -33,11 +33,12 @@ from openerp.tools import misc, config
A dictionary holding some configuration parameters to be initialized when the database is created.
"""
_default_parameters = {
- "database.uuid": lambda: str(uuid.uuid1()),
- "database.create_date": lambda: datetime.datetime.now().strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT),
- "web.base.url": lambda: "http://localhost:%s" % config.get('xmlrpc_port'),
+ "database.uuid": lambda: (str(uuid.uuid1()), []),
+ "database.create_date": lambda: (datetime.datetime.now().strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT), ['base.group_user']),
+ "web.base.url": lambda: ("http://localhost:%s" % config.get('xmlrpc_port'), []),
}
+
class ir_config_parameter(osv.osv):
"""Per-database storage of configuration key-value pairs."""
@@ -47,6 +48,7 @@ class ir_config_parameter(osv.osv):
_columns = {
'key': fields.char('Key', required=True, select=1),
'value': fields.text('Value', required=True),
+ 'group_ids': fields.many2many('res.groups', 'ir_config_parameter_groups_rel', 'icp_id', 'group_id', string='Groups'),
}
_sql_constraints = [
@@ -62,7 +64,9 @@ class ir_config_parameter(osv.osv):
# force=True skips search and always performs the 'if' body (because ids=False)
ids = not force and self.search(cr, SUPERUSER_ID, [('key','=',key)])
if not ids:
- self.set_param(cr, SUPERUSER_ID, key, func())
+ value, groups = func()
+ self.set_param(cr, SUPERUSER_ID, key, value, groups=groups)
+
def get_param(self, cr, uid, key, default=False, context=None):
"""Retrieve the value for a given key.
@@ -78,24 +82,36 @@ class ir_config_parameter(osv.osv):
param = self.browse(cr, uid, ids[0], context=context)
value = param.value
return value
-
- def set_param(self, cr, uid, key, value, context=None):
+
+ def set_param(self, cr, uid, key, value, groups=[], context=None):
"""Sets the value of a parameter.
-
+
:param string key: The key of the parameter value to set.
:param string value: The value to set.
+ :param list of string groups: List of group (xml_id allowed) to read this key.
:return: the previous value of the parameter or False if it did
not exist.
:rtype: string
"""
ids = self.search(cr, uid, [('key','=',key)], context=context)
+
+ gids = []
+ for group_xml in groups:
+ res_id = self.pool['ir.model.data'].xmlid_to_res_id(cr, uid, group_xml)
+ if res_id:
+ gids.append((4, res_id))
+
+ vals = {'value': value}
+ if gids:
+ vals.update(group_ids=gids)
if ids:
param = self.browse(cr, uid, ids[0], context=context)
old = param.value
- self.write(cr, uid, ids, {'value': value}, context=context)
+ self.write(cr, uid, ids, vals, context=context)
return old
else:
- self.create(cr, uid, {'key': key, 'value': value}, context=context)
+ vals.update(key=key)
+ self.create(cr, uid, vals, context=context)
return False
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/openerp/addons/base/ir/ir_config_parameter_view.xml b/openerp/addons/base/ir/ir_config_parameter_view.xml
index 6b2fb611bb3..643fe6b6bf5 100644
--- a/openerp/addons/base/ir/ir_config_parameter_view.xml
+++ b/openerp/addons/base/ir/ir_config_parameter_view.xml
@@ -16,6 +16,7 @@
+
@@ -27,6 +28,7 @@
+
diff --git a/openerp/addons/base/security/base_security.xml b/openerp/addons/base/security/base_security.xml
index 755e20c3832..962b21e6c77 100644
--- a/openerp/addons/base/security/base_security.xml
+++ b/openerp/addons/base/security/base_security.xml
@@ -98,6 +98,16 @@
['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+ ICP read rule
+
+ ['|',('group_ids','in', [g.id for g in user.groups_id]), ('group_ids','=',False)]
+
+
+
+
+
+
multi-company currency rule